Spaces:
Sleeping
Sleeping
Upload 4 files
Browse files- dataset.py +12 -0
- model.py +51 -0
- similarity_embeddings.npy +3 -0
- streamlitapp.py +32 -0
dataset.py
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
from sklearn.model_selection import train_test_split
|
3 |
+
from datasets import DatasetDict, Dataset
|
4 |
+
|
5 |
+
# Load dữ liệu từ CSV (hoặc thay bằng đường dẫn file của bạn)
|
6 |
+
a = pd.read_csv("D:/Pycharm/Project/Project2/Model/datav6.csv")
|
7 |
+
a=a[['context','question','answers']]
|
8 |
+
dataset_a = Dataset.from_pandas(a)
|
9 |
+
# print(dataset_a)
|
10 |
+
# print(dataset_a["context"]) # Giả sử tập train có cột "pos"
|
11 |
+
|
12 |
+
|
model.py
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from sentence_transformers import SentenceTransformer
|
2 |
+
from transformers import AutoModel, AutoTokenizer,AutoModelForSeq2SeqLM
|
3 |
+
import numpy as np
|
4 |
+
from sklearn.metrics.pairwise import cosine_similarity
|
5 |
+
from dataset import dataset_a
|
6 |
+
|
7 |
+
|
8 |
+
def load_model(model_name):
|
9 |
+
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
|
10 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
11 |
+
return model, tokenizer
|
12 |
+
|
13 |
+
|
14 |
+
def generate_answer(model, tokenizer, context, question, max_length=256):
|
15 |
+
input_text = f'context: {context} question: {question}'
|
16 |
+
inputs = tokenizer(input_text, return_tensors="pt", truncation=True)
|
17 |
+
outputs = model.generate(**inputs, max_length=max_length)
|
18 |
+
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
19 |
+
return answer
|
20 |
+
|
21 |
+
|
22 |
+
# if __name__ == "__main__":
|
23 |
+
# model_name = "D:/Pycharm/Project/Project2/Model/vit5/vit5_base.zip/checkpoint-900" # Thay username và model_name bằng tên mô hình trên Hugging Face
|
24 |
+
# model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
|
25 |
+
# tokenizer = AutoTokenizer.from_pretrained(model_name)
|
26 |
+
# print("Mô hình đã load thành công!")
|
27 |
+
#
|
28 |
+
# # Nhập dữ liệu để test
|
29 |
+
# context = """"Công nghệ thông tin đang phát triển mạnh mẽ và trở thành lĩnh vực không thế thiếu trong cuộc sống hiện đại. Thời kỳ hiện nay còn được gọi là thời đại kỹ thuật số, nơi công nghệ luôn thay đổi và phát triển nhanh chóng. Những tiến bộ khoa học công nghệ trong thế kỷ 21 đã tạo ra nhu cầu đào tạo những công dân chúng ta trở thành những công dân số. Công dân số là những người có kỹ năng khai thác, sử dụng Internet và công nghệ một cách an toàn và hiệu quả. Điều này không chỉ đế giải trí mà còn tìm kiếm thông tin, học tập, chia sẻ kiến thức, truyền thông, cũng như tìm hiếu kiến thức và pháp luật.
|
30 |
+
# Chương 1 cung cấp kiến thức tống quát về thế giới số, công dân số, các yếu tố và kỹ năng cần thiết với công dân số. Những nội dung về chuyến đổi số, số hóa, chữ ký số, chính phủ số, chỉnh phủ điện tử, văn hóa, đạo đức và pháp luật trong thế giới số. Nội dung chính của chương bao gồm:
|
31 |
+
# - Thế giới số;
|
32 |
+
# - Công dân số;
|
33 |
+
# - Chuyển đổi số;
|
34 |
+
# - Chỉnh phủ điện tử và chính phủ số;
|
35 |
+
# - Văn hóa, đạo đức và pháp luật trong thế giới số."
|
36 |
+
# """
|
37 |
+
# question = "Công nghệ thông tin đang phát triển như thế nào?"
|
38 |
+
#
|
39 |
+
# # Sinh câu trả lời
|
40 |
+
# answer = generate_answer(model, tokenizer, context, question)
|
41 |
+
# print(f"Answer: {answer}")
|
42 |
+
|
43 |
+
# print(model)
|
44 |
+
|
45 |
+
def find_context(pos_sentences,question,model,embedings='similarity_embeddings.npy'):
|
46 |
+
pos_embeddings = np.load(embedings)
|
47 |
+
query_embedding = model.encode(question)
|
48 |
+
# pos_sentences = dataset_a["context"]
|
49 |
+
similarities = cosine_similarity([query_embedding], pos_embeddings)
|
50 |
+
most_similar_idx = np.argmax(similarities)
|
51 |
+
return pos_sentences[most_similar_idx]
|
similarity_embeddings.npy
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:2634bb356b99cb017393a3d5e4e9477e946a671e772da9c1b84052bc22e695b5
|
3 |
+
size 5351552
|
streamlitapp.py
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
from model import load_model, generate_answer,find_context
|
3 |
+
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
|
4 |
+
from dataset import dataset_a
|
5 |
+
from sentence_transformers import SentenceTransformer
|
6 |
+
|
7 |
+
# Load model automatically
|
8 |
+
MODEL_PATH = "D:/Pycharm/Project/Project2/Model/vit5/vit5_base.zip/checkpoint-900"
|
9 |
+
model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_PATH)
|
10 |
+
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
|
11 |
+
pos_sentences = dataset_a["context"]
|
12 |
+
model2=SentenceTransformer('D:/Pycharm/Project/Project2/Model/model_retrival/tmp/checkpoint-586')
|
13 |
+
|
14 |
+
# Streamlit UI customization
|
15 |
+
st.set_page_config(page_title="Chat Bot Công dân số", page_icon="🤖", layout="wide")
|
16 |
+
st.title("🤖 Chat Bot Công dân số")
|
17 |
+
st.markdown("---")
|
18 |
+
st.success("✅ Model Loaded Successfully")
|
19 |
+
|
20 |
+
st.sidebar.header("⚙️ Settings")
|
21 |
+
max_length = st.sidebar.slider("Max Answer Length", min_value=50, max_value=500, value=256, step=10)
|
22 |
+
|
23 |
+
st.subheader("📌 Ask a Question")
|
24 |
+
# context = st.text_area("📝 Context:", height=150)
|
25 |
+
question = st.text_input("❓ Question:")
|
26 |
+
context=find_context(pos_sentences,question,model2)
|
27 |
+
|
28 |
+
|
29 |
+
if st.button("🚀 Generate Answer"):
|
30 |
+
answer = generate_answer(model, tokenizer, context, question, max_length=max_length)
|
31 |
+
st.markdown("### 💡 Answer:")
|
32 |
+
st.info(answer)
|