Spaces:
Sleeping
Sleeping
init
Browse files- app.py +85 -0
- data/faiss_answer.index +0 -0
- data/faiss_question.index +0 -0
- data/manabi.xlsx +0 -0
- data/qa_data.json +90 -0
- data/raw.json +90 -0
- prepare.py +54 -0
- preprocess.py +33 -0
- requirements.txt +8 -0
app.py
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import faiss
|
3 |
+
import numpy as np
|
4 |
+
import json
|
5 |
+
from sentence_transformers import SentenceTransformer
|
6 |
+
import time
|
7 |
+
|
8 |
+
# データを読み込む
|
9 |
+
with open("data/qa_data.json", "r", encoding="utf-8") as f:
|
10 |
+
data = json.load(f)
|
11 |
+
|
12 |
+
questions = [item["question"] for item in data]
|
13 |
+
answers = [item["answer"] for item in data]
|
14 |
+
|
15 |
+
# 埋め込みモデルをロード
|
16 |
+
model = SentenceTransformer("pkshatech/GLuCoSE-base-ja")
|
17 |
+
|
18 |
+
# FAISSインデックスをロード
|
19 |
+
index_q = faiss.read_index("data/faiss_question.index")
|
20 |
+
index_a = faiss.read_index("data/faiss_answer.index")
|
21 |
+
|
22 |
+
# サイドバー設定
|
23 |
+
st.set_page_config(initial_sidebar_state="collapsed")
|
24 |
+
with st.sidebar.expander("⚙️ 設定", expanded=False):
|
25 |
+
threshold_q = st.slider("質問の類似度しきい値", 0.0, 1.0, 0.7, 0.01)
|
26 |
+
threshold_a = st.slider("回答の類似度しきい値", 0.0, 1.0, 0.65, 0.01)
|
27 |
+
|
28 |
+
|
29 |
+
def search_answer(user_input):
|
30 |
+
"""FAISSを使用して最適な回答を検索"""
|
31 |
+
user_embedding = model.encode([user_input]).astype(np.float32)
|
32 |
+
|
33 |
+
# 質問に対して検索
|
34 |
+
D_q, I_q = index_q.search(user_embedding, 1)
|
35 |
+
score_q = 1 / (1 + D_q[0][0])
|
36 |
+
|
37 |
+
if score_q >= threshold_q:
|
38 |
+
# Replace \n with markdown line breaks
|
39 |
+
return answers[I_q[0][0]].replace("\n", " \n"), f"質問にマッチ ({score_q:.2f})"
|
40 |
+
|
41 |
+
# 回答に対して検索
|
42 |
+
D_a, I_a = index_a.search(user_embedding, 1)
|
43 |
+
score_a = 1 / (1 + D_a[0][0])
|
44 |
+
|
45 |
+
if score_a >= threshold_a:
|
46 |
+
# Replace \n with markdown line breaks
|
47 |
+
return answers[I_a[0][0]].replace("\n", " \n"), f"回答にマッチ ({score_a:.2f})"
|
48 |
+
|
49 |
+
return "申し訳ありませんが、ご質問の答えを見つけることができませんでした。もう少し詳しく説明していただけますか?", "一致なし"
|
50 |
+
|
51 |
+
|
52 |
+
def stream_response(response):
|
53 |
+
"""レスポンスをストリーム表示する(文字単位)"""
|
54 |
+
for char in response:
|
55 |
+
if char == "\n":
|
56 |
+
# Replace newline with markdown line break
|
57 |
+
yield " \n"
|
58 |
+
else:
|
59 |
+
yield char
|
60 |
+
time.sleep(0.05)
|
61 |
+
|
62 |
+
|
63 |
+
# Streamlitチャットインターフェース
|
64 |
+
st.title("🤖 日本語Q&Aチャットボット")
|
65 |
+
|
66 |
+
if "messages" not in st.session_state:
|
67 |
+
st.session_state.messages = []
|
68 |
+
|
69 |
+
for message in st.session_state.messages:
|
70 |
+
with st.chat_message(message["role"]):
|
71 |
+
st.markdown(message["content"])
|
72 |
+
|
73 |
+
if user_input := st.chat_input("質問を入力してください:"):
|
74 |
+
st.session_state.messages.append({"role": "user", "content": user_input})
|
75 |
+
with st.chat_message("user"):
|
76 |
+
st.markdown(user_input)
|
77 |
+
|
78 |
+
with st.spinner("考え中... お待ちください。"):
|
79 |
+
answer, info = search_answer(user_input)
|
80 |
+
|
81 |
+
with st.chat_message("assistant"):
|
82 |
+
response_placeholder = st.empty()
|
83 |
+
response_placeholder.write_stream(stream_response(answer))
|
84 |
+
|
85 |
+
st.session_state.messages.append({"role": "assistant", "content": answer})
|
data/faiss_answer.index
ADDED
Binary file (67.6 kB). View file
|
|
data/faiss_question.index
ADDED
Binary file (67.6 kB). View file
|
|
data/manabi.xlsx
ADDED
Binary file (21.2 kB). View file
|
|
data/qa_data.json
ADDED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"question": "「地域学校協働活動」とは何ですか?",
|
4 |
+
"answer": "地域と学校がパートナーとなり、地域全体で子供たちの成長を支え、地域を創生する活動です。"
|
5 |
+
},
|
6 |
+
{
|
7 |
+
"question": "なぜ地域学校協働活動を推進する必要があるのですか?",
|
8 |
+
"answer": "地域における教育力の低下、家庭の孤立化などの課題や、学校を取り巻く問題の複雑化・困難化に対して社会総掛かりで対応することが求められています。そのためには、地域と学校がパートナーとして連携・協働するための組織的・継続的な仕組みが必要不可欠です。また、新学習指導要領が目指す「社会に開かれた教育課程」の実現に向けて、学校は地域との連携・協働を一層進めていくことが重要であり、より多くの住民等が子供たちの成長を支える活動に参画するための基盤整備していくことが求められています。こうした背景を踏まえ、平成29年3月に社会教育法が改正されました。"
|
9 |
+
},
|
10 |
+
{
|
11 |
+
"question": "「地域学校協働活動」によりどのような効果があるのですか?",
|
12 |
+
"answer": "アンケートによれば、子供たち・学校・地域へ様々な効果があったとの回答が得られています。\n・子供たちへの効果:地域住民と交流することにより、様々な体験や経験の場が増え、「コミュニケーション能力の向上につながった」「地域への理解・関心が深まった」\n・学校への効果:「教員が授業や生徒指導などにより力を注ぐことができた」\n・地域への効果:「地域の活性化につながった」「生きがいづくりや自己実現につながった」\nまた、東日本大震災時に自治組織の立ち上げが順調だったとの回答も得られました。\n(平成27年度地域学校協働活動の実施状況アンケート調査(文部科学省・国立教育政策研究所))"
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"question": "「地域学校協働本部」とは何ですか?",
|
16 |
+
"answer": "平成27年12月の中央教育審議会答申において、従来「学校支援地域本部」等の活動を基盤として、地域による学校の「支援」から、地域と学校双方向の連携・協働へ、また「個別の活動」から活動の「総合化・ネットワーク」を目指し、幅広い地域住民の参画により、地域学校協働活動を推進する新たな体制として提言されたものです。"
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"question": "地域学校協働活動の推進により、教職員の負担が増えるのではないですか?",
|
20 |
+
"answer": "地域学校協働活動のスタートアップの時点では教職員へ負担が大きいという声もあります。しかしながら、学校のみならず住民や保護者も含めた社会総掛かりでの教育の実現を目指すものであり、教職員の負担軽減にも資するものと考えられます。"
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"question": "地域学校協働活動についての国はどのような目標を掲げているのですか?",
|
24 |
+
"answer": "地域学校協働活動について、以下のような目標を掲げています。\n・2022年度までに、全小中学校区をカバーして地域協働活動を推進\n(働き方改革実行計画(平成29年3月28日 働き方改革実現会議決定))\n・2022年度までに、全小中学校区をカバーして地域協働本部を設置\n(ニッポン一億総活躍プラン(平成28年6月2日閣議決定))"
|
25 |
+
},
|
26 |
+
{
|
27 |
+
"question": "地域学校協働活動に対する国の財政的な支援はありますか?",
|
28 |
+
"answer": "文部科学省では、地域学校協働活動の全国的な推進のため平成29年度より「地域学校協働活動推進事業」(令和2年度からは「地域と学校の連携・協働体制構築事業」に名称変更)を実施しています。本事業は、自治体における地域学校協働活動の実施に関し、国庫負担1/3の割合で補助することを目的としており、地域と学校をつなぐコーディネーターとしての役割を果たす地域学校協働活動推進員や、活動を行うボランティア等への謝金、自治体が実施する研修会等に係る経費を計上しています。"
|
29 |
+
},
|
30 |
+
{
|
31 |
+
"question": "「地域学校協働活動」と「学校運営協議会」との関係は?学校運営協議会だけで十分では?",
|
32 |
+
"answer": "学校運営協議会は協議の場です。学校運営協議会において、学校運営への必要な支援について協議が行われ、その結果を踏まえて、より円滑かつ効果的に地域学校協働活動を行うことにより、教育活動の充実や教職員の負担軽減など、学校運営改善に結びつけることが重要で��。"
|
33 |
+
},
|
34 |
+
{
|
35 |
+
"question": "コミュニティ・スクールとは何ですか?",
|
36 |
+
"answer": "「学校運営協議会制度」又は「学校運営協議会制度を導入した学校」のことです。コミュニティ・スクールは学校と地域住民等が力を合わせて学校の運営に取り組むことが可能となる「地域とともにある学校づくり」への転換を図るための有効な仕組みです。"
|
37 |
+
},
|
38 |
+
{
|
39 |
+
"question": "「学校運営協議会」とは何ですか?",
|
40 |
+
"answer": "学校と地域住民や保護者等が学校運営の基本方針の承認や様々な課題の共有を図るともに、学校運営への必要な支援等について協議する場です。(地方教育行政の組織及び運営に関する法律第47条の5、下記の「関係法令について」を参照)"
|
41 |
+
},
|
42 |
+
{
|
43 |
+
"question": "「コミュニティ・スクール」の役割は何ですか?",
|
44 |
+
"answer": "学校運営協議会の主な役割は以下のとおりです。\n・校長が作成する学校運営の基本方針を承認する。\n・学校運営について、教育委員会又は校長に意見を述べることができる。\n・教職員の任用に関して、教育委員会規則に定める事項について、教育委員会に意見を述べることができる。"
|
45 |
+
},
|
46 |
+
{
|
47 |
+
"question": "コミュニティ・スクールでは、教育委員会や校長に自由に意見を言えるのですか?",
|
48 |
+
"answer": "教育委員会や校長に意見を述べるときは、個人の意見がそのまま尊重されるのではなく、保護者や地域住民等の代表による\"合議体\"としての意見を述べることになります。"
|
49 |
+
},
|
50 |
+
{
|
51 |
+
"question": "「地域とともにある学校」には何が必要ですか?",
|
52 |
+
"answer": "学校運営協議会で行う協議に加え、熟議・協働・マネジメントの3つの視点をもって、「情報の共有→課題・目標・ビジョンの共有→アクションの共有→成功体験の共有」の共有の好循環を作ることが重要です。"
|
53 |
+
},
|
54 |
+
{
|
55 |
+
"question": "熟議・協働・マネジメントとは何ですか?",
|
56 |
+
"answer": "・熟議:多くの当事者により「熟慮」と「議論」を重ねながら課題解決を目指す対話のことです。当事者としては、保護者・教職員・地域住民等が含まれます。\n・協働:同じ目的・目標に向かって、対等の立場で協力して共に働くことです。保護者や地域住民が計画段階から参画し、課題や目標等を共有したうえで、目標に向けた取組を進めます。\n・マネジメント:校長は、校務をつかさどり、所属職員を監督します。コミュニティ・スクールの運営には校長の強いリーダーシップが必要です。"
|
57 |
+
},
|
58 |
+
{
|
59 |
+
"question": "最近の関連する法律の改正について教えてください。",
|
60 |
+
"answer": "平成27年12月の中央教育審議会の答申を踏まえ、平成29年3月に社会教育法と地方教育行政の組織及び運営に関する法律第47条の6が改正され、平成29年4月に施行されました。(※令和2年4月1日より、第47条の5)\n\n(1)社会教育法\n・地域学校協働活動を推進する際に、教育委員会が地域と学校との連携協力体制を整備しました。\n・地域と学校をつなぐ役割を担う地域学校協働活動推進員の委嘱に関する規定を整備しました。\n\n(2)地方教育行政の組織及び運営に関する法律第47条の6(※令和2年4月1日より、第47条の5)\n・各教育委員会に対して学校運営協議会の設置が教育委員会の努力義務化されました。"
|
61 |
+
},
|
62 |
+
{
|
63 |
+
"question": "地域の住民が、学校のためにボランティアとして参加するにはどうしたら良いですか?",
|
64 |
+
"answer": "各地方自治体やNPO法人等にご相談ください。"
|
65 |
+
},
|
66 |
+
{
|
67 |
+
"question": "企業やNPO団体が、学校との連携・協働に参加するにはどうしたら良いですか?",
|
68 |
+
"answer": "「土曜学習応援団」へ賛同・登録ください。トップ頁の「企業等による教育プログラム」又は「企業・団体の方」をご覧く"
|
69 |
+
},
|
70 |
+
{
|
71 |
+
"question": "土曜学習応援団とは何ですか?",
|
72 |
+
"answer": "子供たちの豊かな学びを支えるために、多様な企業・団体・大学等に「土曜学習応援団」にご賛同(ご参画)・登録いただき、出前授業・施設見学などにより、特色・魅力ある教育活動をしていただいています。提供していただいた教育プログラムはWEB上で検索可能です。学校・教育委員会・コーディネーター・保護者などに教育プログラムを検索していただき、平日の授業や放課後、土日祝祭日等に出前授業等を行っていただくことができます。"
|
73 |
+
},
|
74 |
+
{
|
75 |
+
"question": "土曜学習応援団の学習プログラムは土曜日に実施する・されるのですか?",
|
76 |
+
"answer": "土曜日に限定されません。平日の授業中や放課後、土曜日、日曜日、祝日などさまざまです。各教育プログラムに、実施の日を掲載しています。実際の実施日時は、各企業・団体等と、学校等とが相談して決めることができます。"
|
77 |
+
},
|
78 |
+
{
|
79 |
+
"question": "どのような学習プログラムが登録されていますか?",
|
80 |
+
"answer": "理科・実験、体育・スポーツ、音楽、美術、社会、プログラミングなどの学校の授業の教科に関連したプログラムや、キャリア教育、環境、金融・経済、安全・防災、国際理解などの教科横断型のプログラムがあります。"
|
81 |
+
},
|
82 |
+
{
|
83 |
+
"question": "土曜学習応援団に賛同・登録しているのはどのような企業・団体ですか?",
|
84 |
+
"answer": "一般企業、NPO法人、大学、各種組合、専門学校等、さまざまです。800以上の企業等が登録しています。"
|
85 |
+
},
|
86 |
+
{
|
87 |
+
"question": "企業・団体・大学等が、土曜学習応援団に賛同・登録するメリットは何ですか?",
|
88 |
+
"answer": "自社の技術・知識を活かして、社会に貢献できます。経営のトップが、SDGs、ESD、CSRなどを意識するようになり、企業の価値評価にも利用されるようになってきております。出前授業を通じて、社員の自社製品に対する理解やモチベーションアップにも繋がります。"
|
89 |
+
}
|
90 |
+
]
|
data/raw.json
ADDED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"question": "「地域学校協働活動」とは何ですか?",
|
4 |
+
"answer": "地域と学校がパートナーとなり、地域全体で子供たちの成長を支え、地域を創生する活動です。"
|
5 |
+
},
|
6 |
+
{
|
7 |
+
"question": "なぜ地域学校協働活動を推進する必要があるのですか?",
|
8 |
+
"answer": "地域における教育力の低下、家庭の孤立化などの課題や、学校を取り巻く問題の複雑化・困難化に対して社会総掛かりで対応することが求められています。そのためには、地域と学校がパートナーとして連携・協働するための組織的・継続的な仕組みが必要不可欠です。また、新学習指導要領が目指す「社会に開かれた教育課程」の実現に向けて、学校は地域との連携・協働を一層進めていくことが重要であり、より多くの住民等が子供たちの成長を支える活動に参画するための基盤整備していくことが求められています。こうした背景を踏まえ、平成29年3月に社会教育法が改正されました。"
|
9 |
+
},
|
10 |
+
{
|
11 |
+
"question": "「地域学校協働活動」によりどのような効果があるのですか?",
|
12 |
+
"answer": "アンケートによれば、子供たち・学校・地域へ様々な効果があったとの回答が得られています。\n・子供たちへの効果:地域住民と交流することにより、様々な体験や経験の場が増え、「コミュニケーション能力の向上につながった」「地域への理解・関心が深まった」\n・学校への効果:「教員が授業や生徒指導などにより力を注ぐことができた」\n・地域への効果:「地域の活性化につながった」「生きがいづくりや自己実現につながった」\nまた、東日本大震災時に自治組織の立ち上げが順調だったとの回答も得られました。\n(平成27年度地域学校協働活動の実施状況アンケート調査(文部科学省・国立教育政策研究所))"
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"question": "「地域学校協働本部」とは何ですか?",
|
16 |
+
"answer": "平成27年12月の中央教育審議会答申において、従来「学校支援地域本部」等の活動を基盤として、地域による学校の「支援」から、地域と学校双方向の連携・協働へ、また「個別の活動」から活動の「総合化・ネットワーク」を目指し、幅広い地域住民の参画により、地域学校協働活動を推進する新たな体制として提言されたものです。"
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"question": "地域学校協働活動の推進により、教職員の負担が増えるのではないですか?",
|
20 |
+
"answer": "地域学校協働活動のスタートアップの時点では教職員へ負担が大きいという声もあります。しかしながら、学校のみならず住民や保護者も含めた社会総掛かりでの教育の実現を目指すものであり、教職員の負担軽減にも資するものと考えられます。"
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"question": "地域学校協働活動についての国はどのような目標を掲げているのですか?",
|
24 |
+
"answer": "地域学校協働活動について、以下のような目標を掲げています。\n・2022年度までに、全小中学校区をカバーして地域協働活動を推進\n(働き方改革実行計画(平成29年3月28日 働き方改革実現会議決定))\n・2022年度までに、全小中学校区をカバーして地域協働本部を設置\n(ニッポン一億総活躍プラン(平成28年6月2日閣議決定))"
|
25 |
+
},
|
26 |
+
{
|
27 |
+
"question": "地域学校協働活動に対する国の財政的な支援はありますか?",
|
28 |
+
"answer": "文部科学省では、地域学校協働活動の全国的な推進のため平成29年度より「地域学校協働活動推進事業」(令和2年度からは「地域と学校の連携・協働体制構築事業」に名称変更)を実施しています。本事業は、自治体における地域学校協働活動の実施に関し、国庫負担1/3の割合で補助することを目的としており、地域と学校をつなぐコーディネーターとしての役割を果たす地域学校協働活動推進員や、活動を行うボランティア等への謝金、自治体が実施する研修会等に係る経費を計上しています。"
|
29 |
+
},
|
30 |
+
{
|
31 |
+
"question": "「地域学校協働活動」と「学校運営協議会」との関係は?学校運営協議会だけで十分では?",
|
32 |
+
"answer": "学校運営協議会は協議の場です。学校運営協議会において、学校運営への必要な支援について協議が行われ、その結果を踏まえて、より円滑かつ効果的に地域学校協働活動を行うことにより、教育活動の充実や教職員の負担軽減など、学校運営改善に結びつけることが重要で��。"
|
33 |
+
},
|
34 |
+
{
|
35 |
+
"question": "コミュニティ・スクールとは何ですか?",
|
36 |
+
"answer": "「学校運営協議会制度」又は「学校運営協議会制度を導入した学校」のことです。コミュニティ・スクールは学校と地域住民等が力を合わせて学校の運営に取り組むことが可能となる「地域とともにある学校づくり」への転換を図るための有効な仕組みです。"
|
37 |
+
},
|
38 |
+
{
|
39 |
+
"question": "「学校運営協議会」とは何ですか?",
|
40 |
+
"answer": "学校と地域住民や保護者等が学校運営の基本方針の承認や様々な課題の共有を図るともに、学校運営への必要な支援等について協議する場です。(地方教育行政の組織及び運営に関する法律第47条の5、下記の「関係法令について」を参照)"
|
41 |
+
},
|
42 |
+
{
|
43 |
+
"question": "「コミュニティ・スクール」の役割は何ですか?",
|
44 |
+
"answer": "学校運営協議会の主な役割は以下のとおりです。\n・校長が作成する学校運営の基本方針を承認する。\n・学校運営について、教育委員会又は校長に意見を述べることができる。\n・教職員の任用に関して、教育委員会規則に定める事項について、教育委員会に意見を述べることができる。"
|
45 |
+
},
|
46 |
+
{
|
47 |
+
"question": "コミュニティ・スクールでは、教育委員会や校長に自由に意見を言えるのですか?",
|
48 |
+
"answer": "教育委員会や校長に意見を述べるときは、個人の意見がそのまま尊重されるのではなく、保護者や地域住民等の代表による\"合議体\"としての意見を述べることになります。"
|
49 |
+
},
|
50 |
+
{
|
51 |
+
"question": "「地域とともにある学校」には何が必要ですか?",
|
52 |
+
"answer": "学校運営協議会で行う協議に加え、熟議・協働・マネジメントの3つの視点をもって、「情報の共有→課題・目標・ビジョンの共有→アクションの共有→成功体験の共有」の共有の好循環を作ることが重要です。"
|
53 |
+
},
|
54 |
+
{
|
55 |
+
"question": "熟議・協働・マネジメントとは何ですか?",
|
56 |
+
"answer": "・熟議:多くの当事者により「熟慮」と「議論」を重ねながら課題解決を目指す対話のことです。当事者としては、保護者・教職員・地域住民等が含まれます。\n・協働:同じ目的・目標に向かって、対等の立場で協力して共に働くことです。保護者や地域住民が計画段階から参画し、課題や目標等を共有したうえで、目標に向けた取組を進めます。\n・マネジメント:校長は、校務をつかさどり、所属職員を監督します。コミュニティ・スクールの運営には校長の強いリーダーシップが必要です。"
|
57 |
+
},
|
58 |
+
{
|
59 |
+
"question": "最近の関連する法律の改正について教えてください。",
|
60 |
+
"answer": "平成27年12月の中央教育審議会の答申を踏まえ、平成29年3月に社会教育法と地方教育行政の組織及び運営に関する法律第47条の6が改正され、平成29年4月に施行されました。(※令和2年4月1日より、第47条の5)\n\n(1)社会教育法\n・地域学校協働活動を推進する際に、教育委員会が地域と学校との連携協力体制を整備しました。\n・地域と学校をつなぐ役割を担う地域学校協働活動推進員の委嘱に関する規定を整備しました。\n\n(2)地方教育行政の組織及び運営に関する法律第47条の6(※令和2年4月1日より、第47条の5)\n・各教育委員会に対して学校運営協議会の設置が教育委員会の努力義務化されました。"
|
61 |
+
},
|
62 |
+
{
|
63 |
+
"question": "地域の住民が、学校のためにボランティアとして参加するにはどうしたら良いですか?",
|
64 |
+
"answer": "各地方自治体やNPO法人等にご相談ください。"
|
65 |
+
},
|
66 |
+
{
|
67 |
+
"question": "企業やNPO団体が、学校との連携・協働に参加するにはどうしたら良いですか?",
|
68 |
+
"answer": "「土曜学習応援団」へ賛同・登録ください。トップ頁の「企業等による教育プログラム」又は「企業・団体の方」をご覧く"
|
69 |
+
},
|
70 |
+
{
|
71 |
+
"question": "土曜学習応援団とは何ですか?",
|
72 |
+
"answer": "子供たちの豊かな学びを支えるために、多様な企業・団体・大学等に「土曜学習応援団」にご賛同(ご参画)・登録いただき、出前授業・施設見学などにより、特色・魅力ある教育活動をしていただいています。提供していただいた教育プログラムはWEB上で検索可能です。学校・教育委員会・コーディネーター・保護者などに教育プログラムを検索していただき、平日の授業や放課後、土日祝祭日等に出前授業等を行っていただくことができます。"
|
73 |
+
},
|
74 |
+
{
|
75 |
+
"question": "土曜学習応援団の学習プログラムは土曜日に実施する・されるのですか?",
|
76 |
+
"answer": "土曜日に限定されません。平日の授業中や放課後、土曜日、日曜日、祝日などさまざまです。各教育プログラムに、実施の日を掲載しています。実際の実施日時は、各企業・団体等と、学校等とが相談して決めることができます。"
|
77 |
+
},
|
78 |
+
{
|
79 |
+
"question": "どのような学習プログラムが登録されていますか?",
|
80 |
+
"answer": "理科・実験、体育・スポーツ、音楽、美術、社会、プログラミングなどの学校の授業の教科に関連したプログラムや、キャリア教育、環境、金融・経済、安全・防災、国際理解などの教科横断型のプログラムがあります。"
|
81 |
+
},
|
82 |
+
{
|
83 |
+
"question": "土曜学習応援団に賛同・登録しているのはどのような企業・団体ですか?",
|
84 |
+
"answer": "一般企業、NPO法人、大学、各種組合、専門学校等、さまざまです。800以上の企業等が登録しています。"
|
85 |
+
},
|
86 |
+
{
|
87 |
+
"question": "企業・団体・大学等が、土曜学習応援団に賛同・登録するメリットは何ですか?",
|
88 |
+
"answer": "自社の技術・知識を活かして、社会に貢献できます。経営のトップが、SDGs、ESD、CSRなどを意識するようになり、企業の価値評価にも利用されるようになってきております。出前授業を通じて、社員の自社製品に対する理解やモチベーションアップにも繋がります。"
|
89 |
+
}
|
90 |
+
]
|
prepare.py
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
import json
|
3 |
+
import re
|
4 |
+
|
5 |
+
|
6 |
+
def remove_prefix(text, prefix_pattern):
|
7 |
+
"""
|
8 |
+
Removes the prefix matching the given pattern from the text.
|
9 |
+
"""
|
10 |
+
return re.sub(prefix_pattern, "", text).strip()
|
11 |
+
|
12 |
+
|
13 |
+
def main():
|
14 |
+
# Read the Excel file
|
15 |
+
try:
|
16 |
+
df = pd.read_excel("data/manabi.xlsx")
|
17 |
+
print("Excel file read successfully.")
|
18 |
+
except FileNotFoundError:
|
19 |
+
print("The file 'data/manabi.xlsx' was not found. Please check the file path.")
|
20 |
+
return
|
21 |
+
except Exception as e:
|
22 |
+
print(f"An error occurred while reading the Excel file: {e}")
|
23 |
+
return
|
24 |
+
|
25 |
+
# Check if the necessary columns exist
|
26 |
+
if "質問" not in df.columns or "回答" not in df.columns:
|
27 |
+
print("The Excel file must contain '質問' and '回答' columns.")
|
28 |
+
return
|
29 |
+
|
30 |
+
# Initialize the list to store processed data
|
31 |
+
qa_list = []
|
32 |
+
|
33 |
+
# Iterate over each row in the DataFrame
|
34 |
+
for index, row in df.iterrows():
|
35 |
+
raw_question = str(row["質問"])
|
36 |
+
raw_answer = str(row["回答"])
|
37 |
+
|
38 |
+
# Remove prefixes using regex patterns
|
39 |
+
question = remove_prefix(raw_question, r"^Q\d+\.\s*")
|
40 |
+
answer = remove_prefix(raw_answer, r"^A\.\s*")
|
41 |
+
|
42 |
+
qa_list.append({"question": question, "answer": answer})
|
43 |
+
|
44 |
+
# Save the list to a JSON file
|
45 |
+
try:
|
46 |
+
with open("data/qa_data.json", "w", encoding="utf-8") as json_file:
|
47 |
+
json.dump(qa_list, json_file, ensure_ascii=False, indent=2)
|
48 |
+
print("Data has been successfully saved to 'data/qa_data.json'.")
|
49 |
+
except Exception as e:
|
50 |
+
print(f"An error occurred while writing to JSON file: {e}")
|
51 |
+
|
52 |
+
|
53 |
+
if __name__ == "__main__":
|
54 |
+
main()
|
preprocess.py
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
import faiss
|
3 |
+
import numpy as np
|
4 |
+
from sentence_transformers import SentenceTransformer
|
5 |
+
|
6 |
+
# Load dữ liệu
|
7 |
+
with open("data/raw.json", "r", encoding="utf-8") as f:
|
8 |
+
data = json.load(f)
|
9 |
+
|
10 |
+
questions = [item["question"] for item in data]
|
11 |
+
answers = [item["answer"] for item in data]
|
12 |
+
|
13 |
+
# Load mô hình embedding
|
14 |
+
model = SentenceTransformer("pkshatech/GLuCoSE-base-ja")
|
15 |
+
|
16 |
+
# Tạo embedding cho câu hỏi và câu trả lời
|
17 |
+
question_embeddings = model.encode(questions)
|
18 |
+
answer_embeddings = model.encode(answers)
|
19 |
+
|
20 |
+
# Lưu FAISS index
|
21 |
+
dim = question_embeddings.shape[1]
|
22 |
+
index_q = faiss.IndexFlatL2(dim)
|
23 |
+
index_a = faiss.IndexFlatL2(dim)
|
24 |
+
|
25 |
+
index_q.add(np.array(question_embeddings).astype(np.float32))
|
26 |
+
index_a.add(np.array(answer_embeddings).astype(np.float32))
|
27 |
+
|
28 |
+
faiss.write_index(index_q, "faiss_question.index")
|
29 |
+
faiss.write_index(index_a, "faiss_answer.index")
|
30 |
+
|
31 |
+
# Lưu dữ liệu gốc
|
32 |
+
with open("qa_data.json", "w", encoding="utf-8") as f:
|
33 |
+
json.dump(data, f, ensure_ascii=False, indent=2)
|
requirements.txt
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
faiss-cpu
|
2 |
+
sentence-transformers
|
3 |
+
streamlit
|
4 |
+
openpyxl
|
5 |
+
sentencepiece
|
6 |
+
torch
|
7 |
+
torchvision
|
8 |
+
torchaudio
|