CreatorPhan commited on
Commit
56523b5
0 Parent(s):

Duplicate from CreatorPhan/VDT

Browse files
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: VDT
3
+ emoji: 💻
4
+ colorFrom: gray
5
+ colorTo: pink
6
+ sdk: gradio
7
+ sdk_version: 3.32.0
8
+ app_file: app.py
9
+ pinned: false
10
+ duplicated_from: CreatorPhan/VDT
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
agent_gpt.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.document_loaders.unstructured import UnstructuredFileLoader
2
+ from langchain.text_splitter import CharacterTextSplitter
3
+ from langchain.embeddings import OpenAIEmbeddings
4
+ from langchain.vectorstores import Chroma
5
+ from langchain.chains import RetrievalQA
6
+ from langchain.chat_models import ChatOpenAI
7
+ from langchain.schema import AIMessage, HumanMessage, SystemMessage, Document
8
+ import os
9
+
10
+
11
+ API_KEY = os.getenv("API_TOKEN")
12
+ print("API:", API_KEY)
13
+
14
+ class Agent:
15
+ def __init__(self, args=None) -> None:
16
+ self.embeddings = OpenAIEmbeddings(openai_api_key=API_KEY)
17
+ self.llm = ChatOpenAI(temperature=0.5, openai_api_key=API_KEY)
18
+ self.context_value = ""
19
+ self.use_context = False
20
+
21
+ def load_context(self, doc_path):
22
+ loader = UnstructuredFileLoader(doc_path.name)
23
+ print('Loading file:', doc_path.name)
24
+ self.documents = loader.load()
25
+ self.split()
26
+
27
+ return f"Using file from {doc_path.name}"
28
+
29
+ def split(self):
30
+ text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
31
+ texts = text_splitter.split_documents(self.documents)
32
+ docsearch = Chroma.from_documents(texts, self.embeddings)
33
+ self.qa = RetrievalQA.from_chain_type(llm=self.llm, chain_type="stuff", retriever=docsearch.as_retriever())
34
+
35
+ print("Context updated")
36
+ self.use_context = True
37
+
38
+ def asking(self, prompt):
39
+ if self.use_context:
40
+ print("Answering with your context")
41
+ return self.qa.run(prompt)
42
+ else:
43
+ print("Answering without your context")
44
+ return self.llm([HumanMessage(content=prompt)]).content
45
+
46
+
47
+ def get_context(self, context):
48
+ self.context_value = context
49
+
50
+ self.documents = [Document(page_content=context, metadata={'source': ''})]
51
+ self.split()
52
+
53
+ self.use_context = True
54
+
55
+ def load_context_file(self, file):
56
+ print('Loading file:', file.name)
57
+ text = ''
58
+ for line in open(file.name, 'r', encoding='utf8'):
59
+ text += line
60
+
61
+ self.context_value = text
62
+ return text
63
+
64
+ def clear_context(self):
65
+ self.context_value = ""
66
+ self.use_context = False
67
+ return ""
agent_t5.py ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.document_loaders.unstructured import UnstructuredFileLoader
2
+ from langchain.text_splitter import CharacterTextSplitter
3
+ from langchain.embeddings import OpenAIEmbeddings
4
+ from langchain.vectorstores import Chroma
5
+ from langchain.chains import RetrievalQA
6
+ from langchain.chat_models import ChatOpenAI
7
+ from langchain.schema import AIMessage, HumanMessage, SystemMessage, Document
8
+ from langchain.document_loaders import PyPDFLoader
9
+
10
+ from transformers import AutoTokenizer, T5ForConditionalGeneration
11
+ from retrieval.retrieval import Retrieval, BM25
12
+ from datetime import datetime
13
+ import os, time, torch
14
+ from torch.nn import Softmax
15
+ import requests
16
+
17
+ API_URL = "https://api-inference.huggingface.co/models/CreatorPhan/ViQA-small"
18
+ headers = {"Authorization": "Bearer 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"}
19
+
20
+ class Agent:
21
+ def __init__(self, args=None) -> None:
22
+ self.args = args
23
+ self.choices = args.choices
24
+ self.corpus = Retrieval(k=args.choices)
25
+
26
+ self.context_value = ""
27
+ self.use_context = False
28
+ self.softmax = Softmax(dim=1)
29
+ self.temp = []
30
+ self.replace_list = torch.load('retrieval/replace.pt')
31
+
32
+ print("Model is loading...")
33
+ self.model = T5ForConditionalGeneration.from_pretrained(args.model).to(args.device)
34
+ self.tokenizer = AutoTokenizer.from_pretrained(args.tokenizer)
35
+ print("Model loaded!")
36
+
37
+
38
+ def load_context(self, doc_path):
39
+ print('Loading file:', doc_path.name)
40
+ if doc_path.name[-4:] == '.pdf':
41
+ context = self.read_pdf(doc_path.name)
42
+ else:
43
+ # loader = UnstructuredFileLoader(doc_path.name)
44
+ context = open(doc_path.name, encoding='utf-8').read()
45
+
46
+ self.retrieval = Retrieval(docs=context)
47
+ self.choices = self.retrieval.k
48
+ self.use_context = True
49
+
50
+ return f"Using file from {doc_path.name}"
51
+
52
+ def API_call(self, prompt):
53
+ response = requests.post(API_URL, headers=headers, json={"inputs": prompt}).json()
54
+ if isinstance(response, list):
55
+ return response[0]['generated_text']
56
+ else:
57
+ time.sleep(3)
58
+ return self.API_call(prompt)
59
+
60
+ def asking(self, question):
61
+ timestamp = datetime.now()
62
+ timestamp = timestamp.strftime("[%Y-%m-%d %H:%M:%S]")
63
+ print(timestamp, end=' ')
64
+
65
+ s_query = time.time()
66
+ if self.use_context:
67
+ print("Answering with your context:", question)
68
+ contexts = self.retrieval.get_context(question)
69
+ else:
70
+ print("Answering without your context:", question)
71
+ contexts = self.corpus.get_context(question)
72
+
73
+ prompts = []
74
+ for context in contexts:
75
+ prompt = f"Trả lời câu hỏi: {question} Trong nội dung: {context['context']}"
76
+ prompts.append(prompt)
77
+
78
+ s_token = time.time()
79
+ tokens = self.tokenizer(prompts, max_length=self.args.seq_len, truncation=True, padding='max_length', return_tensors='pt')
80
+
81
+ s_gen = time.time()
82
+ outputs = self.model.generate(
83
+ input_ids=tokens.input_ids.to(self.args.device),
84
+ attention_mask=tokens.attention_mask.to(self.args.device),
85
+ max_new_tokens=self.args.out_len,
86
+ output_scores=True,
87
+ return_dict_in_generate=True
88
+ )
89
+
90
+
91
+ s_de = time.time()
92
+ results = []
93
+
94
+ scores = self.softmax(outputs.scores[0])
95
+ scores = scores.max(dim=1).values*100
96
+ # print(scores)
97
+ for i in range(self.choices):
98
+ result = contexts[i]
99
+ score = round(scores[i].item())
100
+ result['score'] = score
101
+
102
+ answer = self.tokenizer.decode(outputs.sequences[i], skip_special_tokens=True)
103
+ result['answer'] = answer
104
+ results.append(result)
105
+
106
+ def get_score(record):
107
+ return record['score']**2 * record['score_bm']
108
+
109
+ results.sort(key=get_score, reverse=True)
110
+
111
+ self.temp = results
112
+ t_mess = "t_query: {:.2f}\t t_token: {:.2f}\t t_gen: {:.2f}\t t_decode: {:.2f}\t".format(
113
+ s_token-s_query, s_gen-s_token, s_de-s_gen, time.time()-s_de
114
+ )
115
+ print(t_mess, len(self.temp))
116
+ if results[0]['score'] > 60:
117
+ return results[0]['answer']
118
+ else:
119
+ return f"Tôi không chắc nhưng câu trả lời có thể là: {results[0]['answer']}\nBạn có thể tham khảo các câu trả lời bên cạnh!"
120
+
121
+
122
+
123
+ def get_context(self, context):
124
+ self.context_value = context
125
+
126
+ self.retrieval = Retrieval(k=self.choices, docs=context)
127
+ self.choices = self.retrieval.k
128
+ self.use_context = True
129
+ return context
130
+
131
+ def load_context_file(self, file):
132
+ print('Loading file:', file.name)
133
+ text = ''
134
+ for line in open(file.name, 'r', encoding='utf8'):
135
+ text += line
136
+
137
+ self.context_value = text
138
+ return text
139
+
140
+ def clear_context(self):
141
+ self.context_value = ""
142
+ self.use_context = False
143
+ self.choices = self.args.choices
144
+ return ""
145
+
146
+ def replace(self, text):
147
+ for key, value in self.replace_list:
148
+ text = text.replace(key, value)
149
+ return text
150
+
151
+ def read_pdf(self, file_path):
152
+ loader = PyPDFLoader(file_path)
153
+ pages = loader.load_and_split()
154
+ text = ''
155
+ for page in pages:
156
+ page_content = page.page_content
157
+ text += self.replace(page_content)
158
+
159
+ return text
160
+
app.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import random
3
+ import time
4
+ from agent_t5 import Agent
5
+ from config import Config
6
+ from retrieval.retrieval import BM25
7
+
8
+
9
+ args = Config()
10
+ chatbot = Agent(args)
11
+ RLHF = []
12
+
13
+ with gr.Blocks() as demo:
14
+ gr.Markdown( """<h1><center>Vietnamese QA assistant</center></h1>""")
15
+ with gr.Tab("Chatbot"):
16
+ with gr.Row():
17
+ with gr.Column():
18
+ chatbot_area = gr.Chatbot(
19
+ [[None, "Xin chào!"],
20
+ [None, "Tôi là một công cụ đọc hiểu cho tiếng Việt. Bạn có thể đặt bất kì câu hỏi cho tôi hoặc bạn có thể upload văn bản của bạn và hỏi tôi về nó ở tab 'Your context'"],
21
+ ["Công dụng của paracetamol", "hạ sốt, giảm đau"]]
22
+ ).style(height=600)
23
+ msg = gr.Textbox(label='Your prompt')
24
+
25
+ with gr.Column(scale=0.3, min_width=500):
26
+ for i in range(args.show_c):
27
+ with gr.Accordion(f"Answer {i+1}", open=False) as answer_area:
28
+ with gr.Row():
29
+ gr.Button('👍 Answer').style(size='sm', full_width=False)
30
+ gr.Button('👎🏻 Answer').style(size='sm', full_width=False)
31
+ context_area = gr.Markdown(f"Context {i+1}")
32
+ # gr.CheckboxGroup(choices=['Good Answer', 'Bad Answer', 'Good Context', 'Bad Context'])
33
+
34
+ with gr.Row():
35
+ gr.Button('👍 Context').style(size='sm', full_width=False)
36
+ gr.Button('👎🏻 Context').style(size='sm', full_width=False)
37
+
38
+ RLHF.append(answer_area)
39
+ RLHF.append(context_area)
40
+ clear_chat = gr.Button("Clear history")
41
+
42
+ with gr.Tab("Your context"):
43
+ context_box = gr.Textbox(
44
+ label="Bạn có thể upload hoặc viết văn bản của bạn vào đây và quay lại tab 'Chatbot' để hỏi tôi!",
45
+ lines=20,
46
+ placeholder="Enter your context here..."
47
+ )
48
+
49
+ with gr.Row() as taskbar:
50
+ upload_btt = gr.UploadButton('Upload Context File')
51
+ clear_context_btt = gr.Button("Clear context")
52
+ context_btt = gr.Button("Using context")
53
+
54
+
55
+ def user(user_message, history):
56
+ print("Context box value:", context_box.info)
57
+ return "", history + [[user_message, None]]
58
+
59
+ def bot(history):
60
+ question = history[-1][0]
61
+ answers = chatbot.asking(question)
62
+
63
+
64
+ print(answers)
65
+ history[-1][1] = ""
66
+ for character in answers:
67
+ history[-1][1] += character
68
+ time.sleep(0.01)
69
+ yield history
70
+
71
+ def fill_feedback(prompt):
72
+ results = chatbot.temp
73
+ outptus = []
74
+ for i in range(args.show_c):
75
+ if i < chatbot.choices:
76
+ answer = f"{results[i]['score']}% | {results[i]['answer']}"
77
+ outptus.append(RLHF[2*i].update(label=answer, visible=True, open=False))
78
+ outptus.append(results[i]['context'])
79
+ else:
80
+ outptus.append(RLHF[2*i].update(visible=False))
81
+ outptus.append("No context")
82
+
83
+ return outptus
84
+
85
+ def clear_history(history):
86
+ history = []
87
+ return history
88
+
89
+ msg.submit(user, [msg, chatbot_area], [msg, chatbot_area], queue=False).then(
90
+ bot, chatbot_area, chatbot_area
91
+ ).then(fill_feedback, msg, RLHF)
92
+
93
+ context_btt.click(chatbot.get_context, [context_box, ])
94
+ upload_btt.upload(chatbot.load_context, [upload_btt, ], context_box)
95
+ clear_context_btt.click(chatbot.clear_context, outputs=context_box)
96
+ clear_chat.click(clear_history, chatbot_area, chatbot_area)
97
+
98
+ demo.queue()
99
+ demo.launch(server_name='0.0.0.0')
config.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ class Config:
2
+ model = 'flan-small'
3
+ tokenizer = 'CreatorFPT/T5-base'
4
+ # model = 'vietAI-base-MRC'
5
+ # tokenizer = 'VietAI/vit5-base'
6
+ seq_len = 512
7
+ out_len = 170
8
+ device = 'cpu'
9
+ choices = 16
10
+ show_c = 8
flan-small/config.json ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "/media/data/sinhnta/pretrained/flan-small",
3
+ "architectures": [
4
+ "T5ForConditionalGeneration"
5
+ ],
6
+ "d_ff": 1024,
7
+ "d_kv": 64,
8
+ "d_model": 512,
9
+ "decoder_start_token_id": 0,
10
+ "dense_act_fn": "gelu_new",
11
+ "dropout_rate": 0.1,
12
+ "eos_token_id": 1,
13
+ "feed_forward_proj": "gated-gelu",
14
+ "initializer_factor": 1.0,
15
+ "is_encoder_decoder": true,
16
+ "is_gated_act": true,
17
+ "layer_norm_epsilon": 1e-06,
18
+ "model_type": "t5",
19
+ "n_positions": 512,
20
+ "num_decoder_layers": 8,
21
+ "num_heads": 6,
22
+ "num_layers": 8,
23
+ "output_past": true,
24
+ "pad_token_id": 0,
25
+ "relative_attention_max_distance": 128,
26
+ "relative_attention_num_buckets": 32,
27
+ "task_specific_params": {
28
+ "summarization": {
29
+ "early_stopping": true,
30
+ "length_penalty": 2.0,
31
+ "max_length": 200,
32
+ "min_length": 30,
33
+ "no_repeat_ngram_size": 3,
34
+ "num_beams": 4,
35
+ "prefix": "summarize: "
36
+ },
37
+ "translation_en_to_de": {
38
+ "early_stopping": true,
39
+ "max_length": 300,
40
+ "num_beams": 4,
41
+ "prefix": "translate English to German: "
42
+ },
43
+ "translation_en_to_fr": {
44
+ "early_stopping": true,
45
+ "max_length": 300,
46
+ "num_beams": 4,
47
+ "prefix": "translate English to French: "
48
+ },
49
+ "translation_en_to_ro": {
50
+ "early_stopping": true,
51
+ "max_length": 300,
52
+ "num_beams": 4,
53
+ "prefix": "translate English to Romanian: "
54
+ }
55
+ },
56
+ "tie_word_embeddings": false,
57
+ "torch_dtype": "float32",
58
+ "transformers_version": "4.29.2",
59
+ "use_cache": true,
60
+ "vocab_size": 36096
61
+ }
flan-small/generation_config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "decoder_start_token_id": 0,
4
+ "eos_token_id": 1,
5
+ "pad_token_id": 0,
6
+ "transformers_version": "4.29.2"
7
+ }
flan-small/pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b033cd751356912697a07be627533d4cdd0bcd7fbf92d52e70fef5e9a624ab08
3
+ size 324163077
requirements.txt ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ torch
3
+ psutil
4
+ langchain
5
+ openai
6
+ unstructured
7
+ tabulate
8
+ pdf2image
9
+ chromadb
10
+ tiktoken
11
+ transformers
12
+ sentencepiece
13
+ pyvi
retrieval/__pycache__/retrieval.cpython-39.pyc ADDED
Binary file (6.19 kB). View file
 
retrieval/bm25.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:eef0c1dd2ec0cc725d559100a228b610754b017dd63f3c1497a9a8be56b5a40e
3
+ size 35390697
retrieval/context.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:64acd92300763406bb08f00537e7603a1e7e5d2be2a2e891be92a47263563935
3
+ size 12962223
retrieval/replace.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8382d12663510cda95bc250f78af5884cf1f8cd534bc9fad795e09831b31ba21
3
+ size 3311
retrieval/retrieval.py ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch, math
2
+ from pyvi.ViTokenizer import tokenize
3
+ import re, os, string
4
+ import pandas as pd
5
+ import math
6
+ import numpy as np
7
+
8
+
9
+ class BM25:
10
+
11
+ def __init__(self, k1=1.5, b=0.75):
12
+ self.b = b
13
+ self.k1 = k1
14
+
15
+ def fit(self, corpus):
16
+ """
17
+ Fit the various statistics that are required to calculate BM25 ranking
18
+ score using the corpus given.
19
+
20
+ Parameters
21
+ ----------
22
+ corpus : list[list[str]]
23
+ Each element in the list represents a document, and each document
24
+ is a list of the terms.
25
+
26
+ Returns
27
+ -------
28
+ self
29
+ """
30
+ tf = []
31
+ df = {}
32
+ idf = {}
33
+ doc_len = []
34
+ corpus_size = 0
35
+ for document in corpus:
36
+ corpus_size += 1
37
+ doc_len.append(len(document))
38
+
39
+ # compute tf (term frequency) per document
40
+ frequencies = {}
41
+ for term in document:
42
+ term_count = frequencies.get(term, 0) + 1
43
+ frequencies[term] = term_count
44
+
45
+ tf.append(frequencies)
46
+
47
+ # compute df (document frequency) per term
48
+ for term, _ in frequencies.items():
49
+ df_count = df.get(term, 0) + 1
50
+ df[term] = df_count
51
+
52
+ for term, freq in df.items():
53
+ idf[term] = math.log(1 + (corpus_size - freq + 0.5) / (freq + 0.5))
54
+
55
+ self.tf_ = tf
56
+ self.df_ = df
57
+ self.idf_ = idf
58
+ self.doc_len_ = doc_len
59
+ self.corpus_ = corpus
60
+ self.corpus_size_ = corpus_size
61
+ self.avg_doc_len_ = sum(doc_len) / corpus_size
62
+ return self
63
+
64
+ def search(self, query):
65
+ scores = [self._score(query, index) for index in range(self.corpus_size_)]
66
+ return scores
67
+
68
+ def _score(self, query, index):
69
+ score = 0.0
70
+
71
+ doc_len = self.doc_len_[index]
72
+ frequencies = self.tf_[index]
73
+ for term in query:
74
+ if term not in frequencies:
75
+ continue
76
+
77
+ freq = frequencies[term]
78
+ numerator = self.idf_[term] * freq * (self.k1 + 1)
79
+ denominator = freq + self.k1 * (1 - self.b + self.b * doc_len / self.avg_doc_len_)
80
+ score += (numerator / denominator)
81
+
82
+ return score
83
+
84
+ class Retrieval:
85
+ def __init__(
86
+ self, k=8,
87
+ model='retrieval/bm25.pt',
88
+ contexts='retrieval/context.pt',
89
+ stop_words='retrieval/stopwords.csv',
90
+ max_len = 400,
91
+ docs = None
92
+ ) -> None:
93
+ self.k = k
94
+ self.max_len = max_len
95
+
96
+ data = pd.read_csv(stop_words, sep="\t", encoding='utf-8')
97
+ self.list_stopwords = data['stopwords']
98
+
99
+ if docs:
100
+ self.tuning(docs)
101
+ else:
102
+ self.bm25 = torch.load(model)
103
+ self.contexts = torch.load(contexts)
104
+
105
+
106
+ def get_context(self, query='Chảy máu chân răng là bệnh gì?'):
107
+
108
+ def clean_text(text):
109
+ text = re.sub('<.*?>', '', text).strip()
110
+ text = re.sub('(\s)+', r'\1', text)
111
+ return text
112
+
113
+ def normalize_text(text):
114
+ listpunctuation = string.punctuation.replace('_', '')
115
+ for i in listpunctuation:
116
+ text = text.replace(i, ' ')
117
+ return text.lower()
118
+
119
+ def remove_stopword(text):
120
+ pre_text = []
121
+ words = text.split()
122
+ for word in words:
123
+ if word not in self.list_stopwords:
124
+ pre_text.append(word)
125
+ text2 = ' '.join(pre_text)
126
+
127
+ return text2
128
+
129
+ def word_segment(sent):
130
+ sent = tokenize(sent.encode('utf-8').decode('utf-8'))
131
+ return sent
132
+
133
+
134
+ query = clean_text(query)
135
+ query = word_segment(query)
136
+ query = remove_stopword(normalize_text(query))
137
+ query = query.split()
138
+
139
+ scores = self.bm25.search(query)
140
+ scores_index = np.argsort(scores)
141
+
142
+ results = []
143
+ ss = []
144
+ for k in range(1, self.k+1):
145
+ index = scores_index[-k]
146
+ result = {'score_bm':scores[index], 'index':index, 'context':self.contexts[index]}
147
+ results.append(result)
148
+ ss.append(scores[index])
149
+ print("BM25:", ss)
150
+ return results
151
+
152
+ def split(self, document):
153
+ document = document.replace('\n', ' ')
154
+ document = re.sub(' +', ' ', document)
155
+ sentences = document.split('. ')
156
+ context_list = []
157
+
158
+ context = ""
159
+ length = 0
160
+ pre = ""
161
+ len__ = 0
162
+ for sentence in sentences:
163
+ sentence += '. '
164
+ len_ = len(sentence.split())
165
+ if length + len_ > self.max_len:
166
+ context_list.append(context)
167
+ context = pre
168
+ length = len__
169
+
170
+ length += len_
171
+ context += sentence
172
+
173
+ pre = sentence
174
+ len__ = len_
175
+ context_list.append(context)
176
+
177
+ self.contexts = context_list
178
+ if len(context_list) < self.k:
179
+ self.k = len(context_list)
180
+
181
+
182
+ def tuning(self, document):
183
+
184
+ def clean_text(text):
185
+ text = re.sub('<.*?>', '', text).strip()
186
+ text = re.sub('(\s)+', r'\1', text)
187
+ return text
188
+
189
+ def normalize_text(text):
190
+ listpunctuation = string.punctuation.replace('_', '')
191
+ for i in listpunctuation:
192
+ text = text.replace(i, ' ')
193
+ return text.lower()
194
+
195
+ def remove_stopword(text):
196
+ pre_text = []
197
+ words = text.split()
198
+ for word in words:
199
+ if word not in self.list_stopwords:
200
+ pre_text.append(word)
201
+ text2 = ' '.join(pre_text)
202
+
203
+ return text2
204
+
205
+ def word_segment(sent):
206
+ sent = tokenize(sent.encode('utf-8').decode('utf-8'))
207
+ return sent
208
+
209
+ self.split(document)
210
+
211
+ docs = []
212
+ for content in self.contexts:
213
+ content = clean_text(content)
214
+ content = word_segment(content)
215
+ content = remove_stopword(normalize_text(content))
216
+ docs.append(content)
217
+
218
+ print('There is', len(docs), 'contexts')
219
+ texts = [
220
+ [word for word in document.lower().split() if word not in self.list_stopwords]
221
+ for document in docs
222
+ ]
223
+
224
+ self.bm25 = BM25()
225
+ self.bm25.fit(texts)
retrieval/stopwords.csv ADDED
@@ -0,0 +1,1943 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ stopwords
2
+ mà_thôi
3
+ tuy_có
4
+ đâu_như
5
+ quay_bước
6
+ hỏi_lại
7
+ khẳng_định
8
+ giờ_này
9
+ ren_rén
10
+ một_cơn
11
+ ủa
12
+ chợt
13
+ tốt_bộ
14
+ tuổi_tôi
15
+ mới_hay
16
+ hơn
17
+ để_lòng
18
+ vừa_qua
19
+ thêm_vào
20
+ ào_vào
21
+ nghe_không
22
+ cái_đã
23
+ bây_nhiêu
24
+ cha_chả
25
+ tự_ý
26
+ cái_đó
27
+ không_tính
28
+ chưa_kể
29
+ phía
30
+ tính_từ
31
+ như_ai
32
+ anh_ấy
33
+ lâu_lâu
34
+ nhất_loạt
35
+ khó_khăn
36
+ vùng
37
+ dù_rằng
38
+ sự_việc
39
+ gây_cho
40
+ phải_như
41
+ mạnh
42
+ bước
43
+ dễ_sử_dụng
44
+ nhanh_lên
45
+ bất_quá
46
+ bởi_vì
47
+ cả_ngày
48
+ ô_hay
49
+ cho_đến
50
+ ba_ba
51
+ dưới
52
+ dạ_bán
53
+ gặp
54
+ tránh_xa
55
+ thật_là
56
+ vài_điều
57
+ một_cách
58
+ ba_cùng
59
+ vượt_quá
60
+ vô_kể
61
+ nghe_được
62
+
63
+ ô_kê
64
+
65
+ nhận_nhau
66
+ tên
67
+ riu_ríu
68
+ không_kể
69
+ lời_nói
70
+ trước_đây
71
+ phải_chi
72
+ gần_bên
73
+ chỉ_chính
74
+ cả_tin
75
+ nhất_mực
76
+ cơ_chỉ
77
+ cao_thế
78
+ xuống
79
+ quan_tâm
80
+ ông_từ
81
+ mỗi_lần
82
+ xử_lý
83
+ là_ít
84
+ gì_gì
85
+ quả
86
+ chú_khách
87
+ quay_số
88
+ qua_đi
89
+ thực_vậy
90
+ hơn_là
91
+ làm_mất
92
+ bỏ_quá
93
+ nặng
94
+ dạ_con
95
+ gặp_khó_khăn
96
+ các_cậu
97
+ bằng_được
98
+ đang_thì
99
+ để_đến_nỗi
100
+ nghe_đâu
101
+ nước
102
+ trả_của
103
+ gây_thêm
104
+ tới_mức
105
+ ừ_ào
106
+ trong_đó
107
+ tôi
108
+ thanh_thanh
109
+ thường_đến
110
+ tò_te
111
+ nền
112
+ nhỡ_ra
113
+ từng
114
+ tù_tì
115
+ phải
116
+ phăn_phắt
117
+ cái_gì
118
+ phía_trước
119
+ mọi_giờ
120
+ trước_khi
121
+ tiện_thể
122
+ lên_số
123
+ đến_nơi
124
+ cách_nhau
125
+ nước_quả
126
+ thấy_tháng
127
+ ấy
128
+ chùn_chùn
129
+ ngay_khi
130
+ nhìn
131
+ là_phải
132
+ một_vài
133
+ đại_nhân
134
+ hơn_trước
135
+ chúng_ta
136
+ ăn_tay
137
+ vậy_ư
138
+ không_bán
139
+ theo
140
+ biết_mình
141
+ với_nhau
142
+ ý_hoặc
143
+ cuối_cùng
144
+ đầy_năm
145
+ bấy_chừ
146
+ cụ_thể
147
+ tỏ_ra
148
+ vèo_vèo
149
+ con_nhà
150
+
151
+ ông
152
+ vài_nơi
153
+ tránh_tình_trạng
154
+ ở_vào
155
+ làm_tin
156
+ thuộc_lại
157
+ thế_thường
158
+ ngôi_nhà
159
+ ngồi_bệt
160
+ hiểu
161
+ cho_đang
162
+ nhìn_nhận
163
+ tới_thì
164
+ chuyện
165
+ ra
166
+ bỏ_lại
167
+ vừa
168
+ hãy_còn
169
+ chứ_lại
170
+ thuần
171
+ thêm_giờ
172
+ ắt_hẳn
173
+ ra_đây
174
+ do_đó
175
+ xoẹt
176
+
177
+ giữa_lúc
178
+ giá_trị_thực_tế
179
+ coi_mòi
180
+ ái
181
+ không_có
182
+ ông_tạo
183
+ sự_thế
184
+ còn_thời_gian
185
+ nhận_họ
186
+ tự_vì
187
+ đều_đều
188
+ á
189
+ à
190
+ xin
191
+ trển
192
+ nếu_thế
193
+ ý
194
+ tạo_ra
195
+ nhưng
196
+ đưa_ra
197
+ nhằm_để
198
+ đến_lúc
199
+ ôi_chao
200
+ sáng
201
+ đây_này
202
+ quá_mức
203
+ cách
204
+ cơ_cùng
205
+ làm_ra
206
+ khỏi
207
+ ra_ngôi
208
+ rén
209
+ lại_bộ
210
+ như_thường
211
+ nói_ý
212
+ đến_thì
213
+ lần_trước
214
+ bán
215
+ để_lại
216
+ dạ_dài
217
+ bác
218
+ thiếu_gì
219
+ thì_thôi
220
+ quá_thì
221
+ trên_bộ
222
+ song_le
223
+ rồi_sao
224
+ bấy_giờ
225
+ mức
226
+ đưa_chuyện
227
+ nhà_chung
228
+ rõ_thật
229
+ răng_răng
230
+ sất
231
+ ai_ai
232
+ tính_phỏng
233
+ thì_phải
234
+ chung_cục
235
+ không_cứ
236
+ kể_cả
237
+ qua_tay
238
+ nhận_làm
239
+ thếch
240
+ hơn_nữa
241
+ như_không
242
+ vẫn
243
+ chốc_chốc
244
+ chẳng_phải
245
+ muốn
246
+ thực_tế
247
+ thế_nào
248
+ trước_hết
249
+ người_người
250
+ bắt_đầu_từ
251
+ ra_vào
252
+ tức_thì
253
+ kể_như
254
+ thường_thôi
255
+ thậm
256
+ thực_sự
257
+ do
258
+ cũng_nên
259
+ vung_thiên_địa
260
+ vào_đến
261
+ chưa
262
+ ngày_tháng
263
+ làm_tăng
264
+ trệu_trạo
265
+ tốt
266
+ ngay_tức_khắc
267
+ bất_tử
268
+ bỏ_bà
269
+ nhà_ngươi
270
+ mang_nặng
271
+ nhằm_lúc
272
+ đành_đạch
273
+ tất_cả
274
+ nhất_luật
275
+ điểm
276
+ vùng_lên
277
+ khó_mở
278
+ từ_thế
279
+ không_điều_kiện
280
+ sáng_thế
281
+ thỏm
282
+ bắt_đầu
283
+ phải_chăng
284
+ gần
285
+ người_nghe
286
+ hơn_cả
287
+ có_ăn
288
+ trước_kia
289
+ họ_xa
290
+ trong
291
+ ở_đây
292
+ dễ_như_chơi
293
+ hãy
294
+ ăn_hết
295
+ được
296
+ dùng_cho
297
+ tấn
298
+ mọi
299
+ nếu_mà
300
+ ba_ngôi
301
+ đâu
302
+ con
303
+ nước_bài
304
+ người
305
+ hết_của
306
+ gần_như
307
+ những_như
308
+ bây_bẩy
309
+ ở_lại
310
+ nói_lên
311
+ cần_số
312
+ vẫn_thế
313
+ hết_ý
314
+ quận
315
+ chọn_ra
316
+ sang_tay
317
+ tênh
318
+ lấy_thêm
319
+ nghĩ_tới
320
+ tuy_vậy
321
+ tạo_điều_kiện
322
+ chuyển_đạt
323
+ tanh
324
+ đại_để
325
+ thì
326
+ giảm_thế
327
+ thà
328
+ ra_điều
329
+ thanh_điểm
330
+ mất
331
+ vung_tán_tàn
332
+ nói_qua
333
+ cuối
334
+ chợt_nhìn
335
+ cuốn
336
+ chúng
337
+ đến_lời
338
+ thường_bị
339
+ bạn
340
+ vài_nhà
341
+ nên_người
342
+ với
343
+ khách
344
+ chứ_lị
345
+ từng_thời_gian
346
+ ào
347
+ từ_đó
348
+ tính_người
349
+ nhằm
350
+ nếu_cần
351
+ sáng_ý
352
+ chọn
353
+ từ_tại
354
+ bằng_nào
355
+ toà
356
+ ạ_ơi
357
+ do_vậy
358
+ cả_nghe
359
+ có_ý
360
+ đánh_đùng
361
+ ăn_quá
362
+ cho_đến_khi
363
+ đưa_tới
364
+ tăm_tắp
365
+ nhận
366
+ trời_đất_ơi
367
+ có_họ
368
+ nhìn_chung
369
+ bỗng_dưng
370
+ sang_năm
371
+
372
+ vào_vùng
373
+ chịu_ăn
374
+ hay
375
+ vì_rằng
376
+ bài
377
+ trỏng
378
+ tăng_thế
379
+ thỉnh_thoảng
380
+ thích_cứ
381
+ làm_đúng
382
+ bấy_chầy
383
+ không_cần
384
+ từ_ái
385
+ trong_ngoài
386
+ phải_cách
387
+ mới_rồi
388
+ tính
389
+ vâng_ý
390
+ a_lô
391
+ quả_vậy
392
+ ngọn
393
+ nghĩ_lại
394
+ ngọt
395
+ ngày_ngày
396
+ cụ_thể_là
397
+ người_khách
398
+ lượng
399
+ nói_chung
400
+ nhà_việc
401
+ tin_thêm
402
+ khoảng_cách
403
+
404
+ nào_hay
405
+ bộ_điều
406
+ giảm_chính
407
+ thật_ra
408
+ có_nhiều
409
+ thật_quả
410
+ chao_ôi
411
+ ít_có
412
+ sớm_ngày
413
+ lâu
414
+ bập_bõm
415
+ cao_thấp
416
+ ngay_lúc_này
417
+ ra_chơi
418
+ thế_thôi
419
+ chỉ_tên
420
+ dẫu_mà
421
+ rất_lâu
422
+ bấy_lâu
423
+ chắc_ăn
424
+ như_sau
425
+ bán_thế
426
+ thích_ý
427
+ tuy_rằng
428
+ đây_đó
429
+ không_dùng
430
+ vị_trí
431
+ tăng_giảm
432
+ tạo_nên
433
+ cá_nhân
434
+ ngoài
435
+ vả_chăng
436
+ em_em
437
+ đúng_ra
438
+ làm
439
+ ngồi
440
+ tất_tật
441
+ tốt_mối
442
+ ngõ_hầu
443
+ ra_lời
444
+ không_phải_không
445
+ lại_làm
446
+ lần_sau
447
+ khi
448
+ dễ_thấy
449
+ làm_lấy
450
+ áng_như
451
+ trong_vùng
452
+ tin
453
+ nhất_tâm
454
+ giảm_thấp
455
+ không_ngoài
456
+ biết_đâu
457
+ đều_bước
458
+ theo_tin
459
+ đâu_có
460
+ thiếu
461
+ cậu
462
+ nói
463
+ ngày_này
464
+ nóc
465
+ ô_kìa
466
+ chăn_chắn
467
+ nào_phải
468
+ mọi_nơi
469
+ đáng_số
470
+ ờ_ờ
471
+ ừ_thì
472
+ xuất_hiện
473
+ chứ_sao
474
+ dễ_nghe
475
+ đang
476
+ trả_ngay
477
+ nước_xuống
478
+ đến_xem
479
+ ối_giời
480
+ phía_bạn
481
+ cùng_cực
482
+ những_khi
483
+ đánh_giá
484
+ ba_họ
485
+
486
+ hay_sao
487
+ không_ai
488
+ nên_làm
489
+
490
+ tự_tính
491
+ veo
492
+ nhớ_bập_bõm
493
+ từng_ấy
494
+ nếu_có
495
+ cơ_mà
496
+ để_giống
497
+ suýt
498
+ quá_tin
499
+ của
500
+ bất_cứ
501
+ chị_bộ
502
+ vậy
503
+ biết_đâu_đấy
504
+ từ_nay
505
+ có_vẻ
506
+ kể_tới
507
+ đầy
508
+ nhìn_lại
509
+ xuất_kỳ_bất_ý
510
+ riêng
511
+ lấy_xuống
512
+ điểm_gặp
513
+ đại_loại
514
+ biết_chừng_nào
515
+ tọt
516
+ thôi
517
+ cho_tới
518
+ bệt
519
+ biết_chắc
520
+ sốt_sột
521
+ thật_lực
522
+ tại_đó
523
+ chịu_lời
524
+ chưa_cần
525
+ rứa
526
+ nhỏ
527
+ nghĩ_đến
528
+ giữ_ý
529
+ nhỉ
530
+ nhờ
531
+ nhớ
532
+ nức_nở
533
+ nói_rõ
534
+ vậy_nên
535
+ thanh_không
536
+ cứ_việc
537
+ ở_đó
538
+ nói_đến
539
+ thường_tại
540
+ vài_người
541
+ có_chăng_là
542
+ tại_tôi
543
+ lại_quả
544
+ từng_cái
545
+ điều
546
+ dùng_đến
547
+ cách_bức
548
+ cho_ăn
549
+ đâu_nào
550
+ nhà_ngoài
551
+ chứ_còn
552
+ mối
553
+ chết_tiệt
554
+ thời_điểm
555
+ ắt_là
556
+ đáng_lý
557
+ tà_tà
558
+ ăn_sáng
559
+ đáng_lí
560
+ bất_giác
561
+ lên_xuống
562
+ căn_cắt
563
+ hết_chuyện
564
+ có_nhà
565
+ như_thế
566
+ cao
567
+ dành_dành
568
+ tự_khi
569
+ gây
570
+ có_thể
571
+ lên_mạnh
572
+ ngay
573
+ phải_khi
574
+ ông_ổng
575
+ xiết_bao
576
+ vào
577
+ vài
578
+ nhờ_nhờ
579
+ phè
580
+ vào_gặp
581
+ rồi
582
+ điều_kiện
583
+ ví_thử
584
+ ngồi_trệt
585
+ mang_mang
586
+ thế_là
587
+ ít_thôi
588
+ ra_sao
589
+ khó_biết
590
+ đặt_ra
591
+ nhiên_hậu
592
+ nghe_đâu_như
593
+ lúc_lâu
594
+ đâu_cũng
595
+ đến_thế
596
+ ứ_ừ
597
+ chung_cuộc
598
+ âu_là
599
+ tạo_cơ_hội
600
+
601
+ à_này
602
+ so
603
+ bởi_vậy
604
+ nhằm_vào
605
+ thời_gian_tính
606
+ thấp_thỏm
607
+ càng_càng
608
+ lớn_nhỏ
609
+ giờ_đến
610
+ có_điều_kiện
611
+ tốt_hơn
612
+ phải_lời
613
+ bản
614
+ giờ_lâu
615
+ ở_năm
616
+ dùng
617
+ nghỉm
618
+ cả
619
+ chùn_chũn
620
+ ái_chà
621
+ chịu
622
+ giống
623
+ quan_trọng_vấn_đề
624
+ đến_khi
625
+ hay_đâu
626
+ lòng_không
627
+ em
628
+ nào_đó
629
+ đến_bao_giờ
630
+ bất_đồ
631
+ tấn_tới
632
+ nghiễm_nhiên
633
+ ứ_hự
634
+ rất
635
+ lại_giống
636
+ làm_nên
637
+ ngăn_ngắt
638
+ lấy_làm
639
+ cật_sức
640
+ khác_xa
641
+ xệp
642
+ cô_tăng
643
+ nhớ_ra
644
+ nơi_nơi
645
+ tăng_cấp
646
+ một_ít
647
+ nếu
648
+ mọi_người
649
+ lại_còn
650
+ phần
651
+ gây_ra
652
+ tênh_tênh
653
+ biết_trước
654
+ thiếu_điểm
655
+ chiếc
656
+ chắc_vào
657
+ như_thể
658
+ sau_nữa
659
+ tựu_trung
660
+ ai_nấy
661
+ nếu_được
662
+ xa
663
+ thường_khi
664
+ giữ_lấy
665
+ bởi_chưng
666
+ nếu_như
667
+ của_ngọt
668
+ dùng_hết
669
+ trực_tiếp_làm
670
+ sở_dĩ
671
+ lớn_lên
672
+ bởi_thế_cho_nên
673
+ điểm_đầu_tiên
674
+ ấy_là
675
+ quay
676
+ ối_giời_ơi
677
+ một
678
+ không
679
+ cùng
680
+ thà_là
681
+ dưới_nước
682
+ có_chuyện
683
+ ông_ấy
684
+ oai_oái
685
+ chứ_không_phải
686
+ việc_gì
687
+ nói_khó
688
+ ngay_thật
689
+ sao
690
+ bội_phần
691
+ anh
692
+ có_dễ
693
+ xăm_xắm
694
+ thêm_chuyện
695
+ giống_như
696
+ trong_khi
697
+ sau
698
+ bỏ_ra
699
+ ngày_qua
700
+ trước_tuổi
701
+ xa_cách
702
+ rón_rén
703
+ bây_giờ
704
+ không_chỉ
705
+ hết_cả
706
+ buổi_làm
707
+ sáng_ngày
708
+ chúng_tôi
709
+ hay_nói
710
+ lấy_lý_do
711
+ ngay_tức_thì
712
+ này_nọ
713
+ thuần_ái
714
+ trong_số
715
+ bỏ_không
716
+ có_thế
717
+ thuộc_cách
718
+ căn_tính
719
+ sang_sáng
720
+ lại_cái
721
+ nhân_tiện
722
+ xa_nhà
723
+ khó_làm
724
+ bởi_thế
725
+ nhiều_ít
726
+ buổi_ngày
727
+ quả_thế
728
+ thực_hiện
729
+ thím
730
+ chăng_nữa
731
+ chú
732
+ đặt
733
+ chú_mình
734
+ cho_nên
735
+
736
+ chung_qui
737
+ cấp_số
738
+ vụt
739
+ chung_quy
740
+ duy_có
741
+ tại_sao
742
+ nặng_mình
743
+ biết_đâu_chừng
744
+ làm_dần_dần
745
+ đến_điều
746
+ bất_chợt
747
+ ăn_chịu
748
+ ở_được
749
+ ồ_ồ
750
+ thốc_tháo
751
+ vì_vậy
752
+ nói_toẹt
753
+ thật_thà
754
+ tháng_năm
755
+ ô_hô
756
+ nói_nhỏ
757
+ dùng_làm
758
+ tuy
759
+ đã_lâu
760
+ sau_cuối
761
+ từ_căn
762
+ lúc_đó
763
+ chí_chết
764
+ bất_kỳ
765
+ ăn_riêng
766
+ giống_nhau
767
+ làm_lòng
768
+ bất_kể
769
+ đã_không
770
+ bỗng_đâu
771
+ chịu_chưa
772
+ mang
773
+ lần_nào
774
+ ít_hơn
775
+ giữ
776
+ thái_quá
777
+ thộc
778
+ đưa_tay
779
+ thật_tốt
780
+ rằng
781
+ không_gì
782
+ rồi_thì
783
+ rằng_là
784
+ giờ
785
+ lấy_để
786
+ quá
787
+ còn_nữa
788
+ khác
789
+ tại_nơi
790
+ ít_ra
791
+ tất_thảy
792
+ chăng_chắc
793
+ dẫu_sao
794
+ dần_dà
795
+ lời_chú
796
+ khác_khác
797
+ ít_lâu
798
+ phía_sau
799
+ cuối_điểm
800
+ khoảng
801
+ chỉ_có
802
+ xem_ra
803
+ bỏ_mẹ
804
+ tránh_ra
805
+ nhìn_thấy
806
+ mang_lại
807
+ cứ
808
+ thấp_cơ
809
+ mình
810
+ mỗi
811
+ cùng_ăn
812
+ xăm_xăm
813
+ sau_sau
814
+ hay_là
815
+ đưa_cho
816
+ thường_xuất_hiện
817
+ sao_đang
818
+ đã_hay
819
+ từng_giờ
820
+ phần_lớn
821
+ nhân_dịp
822
+ giữa
823
+ tháng_tháng
824
+ nhờ_đó
825
+ phần_nhiều
826
+ nghĩ_xa
827
+ đáng
828
+ có_tháng
829
+ chết_nỗi
830
+ cũng
831
+ bị_chú
832
+ có_phải
833
+ phót
834
+ nhận_ra
835
+ phóc
836
+ làm_tại
837
+ đã_thế
838
+ tạo
839
+ trong_mình
840
+ tại
841
+ sắp_đặt
842
+ lấy_ráo
843
+ nhờ_chuyển
844
+ biết_bao
845
+ ra_bài
846
+ thốt_nhiên
847
+ ra_lại
848
+ làm_vì
849
+ hỏi
850
+ giờ_đi
851
+ vượt
852
+ do_vì
853
+ lấy_ra
854
+ về_sau
855
+ tăng
856
+ cụ_thể_như
857
+ thành_thử
858
+ thường_hay
859
+ bằng_như
860
+ tông_tốc
861
+ đều
862
+ nhìn_theo
863
+ ăn_trên
864
+ bỏ
865
+ phần_sau
866
+ nhất_định
867
+ chưa_từng
868
+ tắp_tắp
869
+ mà_vẫn
870
+ bớ
871
+ bộ
872
+ thi_thoảng
873
+ nhanh
874
+ ra_gì
875
+ đúng_với
876
+ tất_cả_bao_nhiêu
877
+ khi_trước
878
+ như_trên
879
+ ơi
880
+
881
+ chầm_chập
882
+ tha_hồ
883
+ chính_thị
884
+ ngày_nào
885
+ có_khi
886
+
887
+ nhận_việc
888
+ choa
889
+ ở_như
890
+ tên_chính
891
+ thục_mạng
892
+ làm_ngay
893
+ không_cùng
894
+ sử_dụng
895
+ chỉn
896
+ bởi_tại
897
+ không_có_gì
898
+ quá_bộ
899
+ bước_tới
900
+ vạn_nhất
901
+ hỏi_xem
902
+ việc
903
+ như_là
904
+ khá_tốt
905
+ quá_đáng
906
+ thường_sự
907
+ cây_nước
908
+ trước_ngày
909
+ bập_bà_bập_bõm
910
+ đâu_đó
911
+ được_cái
912
+ ráo_trọi
913
+ nhất_sinh
914
+ ngồi_sau
915
+ con_dạ
916
+ từ_tính
917
+ sa_sả
918
+ tại_đâu
919
+ càng_hay
920
+ lần_sang
921
+ bỏ_cuộc
922
+ tại_đây
923
+ nghe_thấy
924
+ nghĩ
925
+ ra_ý
926
+ trong_này
927
+ mở_ra
928
+ ai
929
+ ráo_cả
930
+ ngày_xưa
931
+ tình_trạng
932
+ xem_số
933
+ phải_không
934
+ tháng
935
+ thốt_thôi
936
+ đặt_mức
937
+ nữa_rồi
938
+ bỗng_nhiên
939
+ đặt_làm
940
+ vừa_vừa
941
+ không_phải
942
+ nói_ra
943
+ á_à
944
+ người_hỏi
945
+ vậy_thì
946
+ lời
947
+ tốt_ngày
948
+ có_người
949
+ chị_ấy
950
+ ái_dà
951
+ phỉ_phui
952
+ chính_là
953
+ ý_da
954
+ bên
955
+ lấy_vào
956
+ ngày_ấy
957
+ đáng_kể
958
+ cho_rằng
959
+ rồi_đây
960
+ chớ_chi
961
+ còn_về
962
+ bỏ_cha
963
+ nhưng_mà
964
+ vượt_khỏi
965
+ phía_trên
966
+ ở_trên
967
+ lớn
968
+ lúc_ấy
969
+ thoạt_nhiên
970
+ chung_ái
971
+ phải_tay
972
+ bỗng_thấy
973
+ nhất_nhất
974
+ nhất_quyết
975
+ bỏ_việc
976
+ để_được
977
+ nghe_lại
978
+ bằng_không
979
+ trếu_tráo
980
+ có_ngày
981
+ đặt_để
982
+ sang
983
+ thì_giờ
984
+ bài_bỏ
985
+ lại_người
986
+ tiếp_theo
987
+ nhất_tề
988
+ lượng_số
989
+ qua_lại
990
+ xảy_ra
991
+ hiện_nay
992
+ chính_giữa
993
+ mang_về
994
+ thật
995
+ chứ_như
996
+ chợt_nghe
997
+ hỗ_trợ
998
+ đến_ngày
999
+ làm_tôi
1000
+ mọi_việc
1001
+ nói_đủ
1002
+ được_lời
1003
+ lượng_từ
1004
+ thật_vậy
1005
+ dở_chừng
1006
+ dễ
1007
+ phải_lại
1008
+ thời_gian
1009
+ sao_bản
1010
+ vì_thế
1011
+ từ_loại
1012
+ tháng_ngày
1013
+ dữ
1014
+ vừa_rồi
1015
+ lần_theo
1016
+ chỉ_là
1017
+ chắc_hẳn
1018
+ họ
1019
+ phỏng_như
1020
+ bông
1021
+ loại
1022
+ vâng_dạ
1023
+ vấn_đề
1024
+ sáng_rõ
1025
+ tuy_nhiên
1026
+ gồm
1027
+ phương_chi
1028
+ sắp
1029
+ gần_đây
1030
+ hay_tin
1031
+ hay_làm
1032
+ nặng_căn
1033
+ cơ_dẫn
1034
+ cần
1035
+ dễ_đâu
1036
+ dù_cho
1037
+ nghe_trực_tiếp
1038
+ cật_lực
1039
+ mà_cả
1040
+ số_thiếu
1041
+ chơi_họ
1042
+ ngày_rày
1043
+ đủ_dùng
1044
+ ăn_chung
1045
+ thật_chắc
1046
+ có_điều
1047
+ bấy_nay
1048
+ thậm_cấp
1049
+ ví_phỏng
1050
+ cho_nhau
1051
+ thuộc_bài
1052
+ nữa_là
1053
+ nhớ_lại
1054
+ thế_à
1055
+ vốn_dĩ
1056
+ chưa_có
1057
+ giá_trị
1058
+ ắt_phải
1059
+ sao_vậy
1060
+ bất_quá_chỉ
1061
+ thế_chuẩn_bị
1062
+ lượng_cả
1063
+ không_bao_lâu
1064
+ mọi_lúc
1065
+ thế_đó
1066
+ bay_biến
1067
+ về
1068
+ nhón_nhén
1069
+ đưa_về
1070
+ dào
1071
+ còn
1072
+ làm_như
1073
+
1074
+ vô_luận
1075
+
1076
+ tự_lượng
1077
+
1078
+ luôn_cả
1079
+ toẹt
1080
+
1081
+ cứ_điểm
1082
+
1083
+ chưa_bao_giờ
1084
+ dạ
1085
+ chịu_tốt
1086
+ tăng_thêm
1087
+ bằng_người
1088
+ phỏng_theo
1089
+ có_đâu
1090
+ lâu_các
1091
+ tuốt_tuồn_tuột
1092
+ riêng_từng
1093
+ tỏ_vẻ
1094
+ cao_số
1095
+ như
1096
+ đại_phàm
1097
+ lên_cơn
1098
+ đủ_điểm
1099
+ thế_nên
1100
+ lần
1101
+ trả_trước
1102
+ là_nhiều
1103
+ tắp
1104
+ quay_đi
1105
+ a_ha
1106
+ xăm_xúi
1107
+ lòng
1108
+ tắp_lự
1109
+ phải_người
1110
+ bỏ_mình
1111
+ chú_dẫn
1112
+ đủ_điều
1113
+ khoảng_không
1114
+ đã_vậy
1115
+ yêu_cầu
1116
+ câu_hỏi
1117
+ cho_tới_khi
1118
+ nước_đến
1119
+ để
1120
+ chính_điểm
1121
+ tìm_hiểu
1122
+ ăn_hỏi
1123
+ dẫu
1124
+ ngươi
1125
+ gần_hết
1126
+ như_tuồng
1127
+ khỏi_nói
1128
+ tìm_ra
1129
+ bất_thình_lình
1130
+ trực_tiếp
1131
+ mới
1132
+ xa_gần
1133
+ xa_tanh
1134
+ chứ_gì
1135
+ ngoải
1136
+ dài_ra
1137
+ bao_nả
1138
+ này
1139
+ trên_dưới
1140
+ số_cụ_thể
1141
+ nói_là
1142
+ nào
1143
+ luôn
1144
+ nước_nặng
1145
+ khác_gì
1146
+ cả_đến
1147
+ đó_đây
1148
+ thay_đổi
1149
+ gần_ngày
1150
+ phía_trong
1151
+ như_thế_nào
1152
+ tạo_ý
1153
+ buổi
1154
+ quay_lại
1155
+ khá
1156
+ có_cơ
1157
+ cảm_ơn
1158
+ dễ_ngươi
1159
+ khó
1160
+ như_chơi
1161
+ phải_giờ
1162
+ tuổi
1163
+ tốc_tả
1164
+ răng
1165
+ nhờ_có
1166
+ rồi_xem
1167
+ ngoài_xa
1168
+ chưa_tính
1169
+ được_nước
1170
+ thình_lình
1171
+ phía_bên
1172
+ sau_đó
1173
+ lại_ăn
1174
+ sao_bằng
1175
+ quá_bán
1176
+ nguồn
1177
+ phụt
1178
+ nhất_thì
1179
+ cùng_nhau
1180
+ nên_chi
1181
+ nghe_nhìn
1182
+ lấy_được
1183
+ cho_chắc
1184
+ bỏ_riêng
1185
+ ơi_là
1186
+ lên_cao
1187
+ mới_đây
1188
+ thế_thì
1189
+ bằng_vào
1190
+ cuộc
1191
+ kể_từ
1192
+ bất_kì
1193
+ đầu_tiên
1194
+ trả_lại
1195
+ ngôi_thứ
1196
+ ít_nhất
1197
+ cách_không
1198
+ nhằm_khi
1199
+ chung_quy_lại
1200
+ cu_cậu
1201
+ xuất_kì_bất_ý
1202
+ nhất_thiết
1203
+ phải_biết
1204
+ nghen
1205
+ đưa_đến
1206
+ kể
1207
+ đâu_phải
1208
+ dễ_gì
1209
+ đến_gần
1210
+ quả_là
1211
+ đến_nay
1212
+ cao_xa
1213
+ thốt_nói
1214
+ nghe_nói
1215
+ bởi_nhưng
1216
+ phè_phè
1217
+ công_nhiên
1218
+ đặt_trước
1219
+ bước_đi
1220
+ lấy_cả
1221
+ chứ_không
1222
+ tuần_tự
1223
+ thích_tự
1224
+ mà_lại
1225
+ để_mà
1226
+
1227
+ với_lại
1228
+ đến_giờ
1229
+ ngày_càng
1230
+ bản_bộ
1231
+ dẫu_rằng
1232
+ ừ_ừ
1233
+ nói_bông
1234
+ như_quả
1235
+ bèn
1236
+ về_phần
1237
+ chậc
1238
+ tìm_việc
1239
+ làm_được
1240
+ lúc_đến
1241
+ có_đáng
1242
+ mọi_sự
1243
+ vâng
1244
+ úi_chà
1245
+ khác_nhau
1246
+ tự_ăn
1247
+ ngay_từ
1248
+ nhung_nhăng
1249
+ khác_thường
1250
+ số_người
1251
+ khó_tránh
1252
+ bỗng
1253
+ cứ_như
1254
+ bởi_đâu
1255
+ một_khi
1256
+ tính_cách
1257
+ tiếp_đó
1258
+ qua_khỏi
1259
+ mất_còn
1260
+ là_thế_nào
1261
+ giống_người
1262
+ ông_nhỏ
1263
+ hoặc_là
1264
+ vung_tàn_tán
1265
+ cũng_được
1266
+ thanh_ba
1267
+ con_tính
1268
+ chắc_chắn
1269
+ vị_tất
1270
+ ngày_nọ
1271
+ bên_bị
1272
+ cóc_khô
1273
+ ngay_bây_giờ
1274
+ thì_là
1275
+ làm_riêng
1276
+ chứ_ai
1277
+ tuy_đã
1278
+ đâu_đây
1279
+ trừ_phi
1280
+ lý_do
1281
+ đâu_đâu
1282
+ ôi_thôi
1283
+ nhiều
1284
+ quá_trình
1285
+ ăn_chắc
1286
+ chuyển_tự
1287
+ duy
1288
+ ngày_giờ
1289
+ khi_nên
1290
+ chắc_dạ
1291
+ nên_chăng
1292
+ tuốt_luốt
1293
+ dành
1294
+ không_nhận
1295
+ văng_tê
1296
+ cả_thể
1297
+ tấm_các
1298
+ nói_thêm
1299
+ thà_rằng
1300
+ đưa
1301
+ xoét
1302
+ ráo
1303
+ à_ơi
1304
+ thích_thuộc
1305
+ đặc_biệt
1306
+ ngày_xửa
1307
+ chưa_dùng
1308
+ duy_chỉ
1309
+ phỏng
1310
+ phía_dưới
1311
+ rồi_ra
1312
+ thế_lại
1313
+ thường_tính
1314
+ bà_ấy
1315
+ những_lúc
1316
+ chành_chạnh
1317
+ trước_đó
1318
+ thứ_bản
1319
+ số_là
1320
+ lại_thôi
1321
+ thoạt
1322
+ giờ_đây
1323
+ lại_nói
1324
+
1325
+ đ��_số
1326
+ tha_hồ_chơi
1327
+ từ_giờ
1328
+ khó_chơi
1329
+ quá_giờ
1330
+ trở_thành
1331
+ ngay_cả
1332
+ ví_dù
1333
+ sau_hết
1334
+ cấp
1335
+ bằng_cứ
1336
+ ngay_lúc
1337
+ ít_khi
1338
+ đủ_nơi
1339
+ bên_cạnh
1340
+ lên_nước
1341
+ chúng_mình
1342
+ qua_thì
1343
+ được_tin
1344
+ đây
1345
+ biết_việc
1346
+ thực_hiện_đúng
1347
+ tên_tự
1348
+ làm_theo
1349
+ nghe_rõ
1350
+ mở
1351
+ tột
1352
+ rồi_sau
1353
+ ăn_ngồi
1354
+ vào_khoảng
1355
+ lấy_có
1356
+ thảo_hèn
1357
+ cái_ấy
1358
+ đến_nỗi
1359
+ cực_lực
1360
+ đủ
1361
+ suýt_nữa
1362
+ nói_phải
1363
+ thậm_chí
1364
+ cho_biết
1365
+ hơn_hết
1366
+ mợ
1367
+ buổi_mới
1368
+ tại_vì
1369
+ từng_phần
1370
+ thứ
1371
+ năm_tháng
1372
+ rốt_cuộc
1373
+ nói_thật
1374
+ ơ_kìa
1375
+ nước_ăn
1376
+ thì_ra
1377
+ hầu_hết
1378
+ lâu_nay
1379
+ ngày_cấp
1380
+ bài_bác
1381
+ như_trước
1382
+ sao_cho
1383
+ loại_từ
1384
+ phải_rồi
1385
+ ba
1386
+ đều_nhau
1387
+ trả
1388
+ lúc_sáng
1389
+ ớ_này
1390
+ bỗng_không
1391
+ mọi_thứ
1392
+ cây
1393
+ vừa_lúc
1394
+ lấy
1395
+ vừa_khi
1396
+ phốc
1397
+ chớ_không
1398
+ người_mình
1399
+ bằng_nhau
1400
+ nghe_hiểu
1401
+ tại_lòng
1402
+ nhé
1403
+ không_những
1404
+ cả_nhà
1405
+ nữa_khi
1406
+ lần_lần
1407
+ bị
1408
+ rày
1409
+ sau_đây
1410
+ tay_quay
1411
+ bằng
1412
+ con_con
1413
+ nghe_ra
1414
+ sẽ_hay
1415
+ thích
1416
+ chủn
1417
+ than_ôi
1418
+ càng
1419
+ vài_tên
1420
+ bị_vì
1421
+ ối_dào
1422
+ hoặc
1423
+ xềnh_xệch
1424
+ không_để
1425
+ ra_tay
1426
+ nặng_về
1427
+ veo_veo
1428
+ sau_này
1429
+ cả_ăn
1430
+ coi_bộ
1431
+ ý_chừng
1432
+ làm_bằng
1433
+ vâng_vâng
1434
+ cao_ráo
1435
+ thanh_tính
1436
+ không_hay
1437
+ lại_đây
1438
+ xin_gặp
1439
+ nói_trước
1440
+ phần_nào
1441
+ tránh
1442
+ rén_bước
1443
+ đơn_vị
1444
+ nay
1445
+ thửa
1446
+ tuốt_tuột
1447
+ tột_cùng
1448
+ oái
1449
+ quá_lời
1450
+ lúc_trước
1451
+ lấy_số
1452
+ đưa_em
1453
+ khó_thấy
1454
+ ít_nhiều
1455
+ ở_nhờ
1456
+ cùng_với
1457
+ nọ
1458
+ khi_khác
1459
+ tối_ư
1460
+ nớ
1461
+ lần_này
1462
+ dầu_sao
1463
+ làm_gì
1464
+ bởi_ai
1465
+ gặp_phải
1466
+ hỏi_xin
1467
+ nhất
1468
+ chẳng_nữa
1469
+ rõ_là
1470
+ đúng
1471
+ ai_đó
1472
+ xa_tắp
1473
+ căn_cái
1474
+ ba_bản
1475
+ tấm_bản
1476
+ cũng_vậy_thôi
1477
+ cùng_tột
1478
+ nhà_tôi
1479
+ bỗng_nhưng
1480
+ khó_nói
1481
+ quá_tuổi
1482
+ nấy
1483
+ ngay_khi_đến
1484
+ ổng
1485
+ vâng_chịu
1486
+ vở
1487
+ sẽ
1488
+ bấy_lâu_nay
1489
+ tuy_thế
1490
+ tự_tạo
1491
+ điều_gì
1492
+ lúc_này
1493
+ mỗi_một
1494
+ ngồi_không
1495
+ mỗi_người
1496
+ lúc_nào
1497
+ qua_ngày
1498
+ gây_giống
1499
+ bỗng_chốc
1500
+ hay_biết
1501
+ cao_răng
1502
+ tuyệt_nhiên
1503
+ giảm
1504
+ thúng_thắng
1505
+ dạ_dạ
1506
+ vả_lại
1507
+ nhau
1508
+ vừa_mới
1509
+ vùng_nước
1510
+ nói_lại
1511
+ ngọn_nguồn
1512
+ trên
1513
+ cao_sang
1514
+ ngôi
1515
+ chung_cho
1516
+ sì_sì
1517
+ năm
1518
+ đảm_bảo
1519
+ thế
1520
+ sẽ_biết
1521
+ ngộ_nhỡ
1522
+ dễ_khiến
1523
+ thậm_từ
1524
+ tự
1525
+ cả_nghĩ
1526
+ riệt
1527
+ ăn_về
1528
+ rồi_nữa
1529
+ lần_khác
1530
+ chưa_chắc
1531
+ tìm_cách
1532
+ cả_người
1533
+ thương_ôi
1534
+ tha_hồ_ăn
1535
+ bấy_nhiêu
1536
+ ít_biết
1537
+ chắc
1538
+ hay_hay
1539
+ tất_tần_tật
1540
+ cha
1541
+ tới_nơi
1542
+ vậy_là
1543
+ thế_sự
1544
+ dạ_khách
1545
+ cho
1546
+ ào_ào
1547
+ tanh_tanh
1548
+ đến_hay
1549
+ biết_bao_nhiêu
1550
+ alô
1551
+ bỏ_xa
1552
+ thuộc_từ
1553
+ lúc_đi
1554
+ biết_được
1555
+ chẳng_lẽ
1556
+ chính
1557
+ hết_rồi
1558
+ tự_cao
1559
+ cho_hay
1560
+ vài_ba
1561
+ chớ_gì
1562
+ nếu_vậy
1563
+ có_chăng
1564
+ cho_thấy
1565
+ bản_thân
1566
+ tay
1567
+ thẩy
1568
+ cho_được
1569
+ khi_không
1570
+ chuyển
1571
+ hết_nói
1572
+ có_ai
1573
+ bán_cấp
1574
+ cho_tin
1575
+ ít_quá
1576
+ bước_khỏi
1577
+ là_vì
1578
+ xuể
1579
+ ba_tăng
1580
+ bây_chừ
1581
+ có_chứ
1582
+ tăng_chúng
1583
+ nữa
1584
+ lúc
1585
+ biết_mấy
1586
+ sau_chót
1587
+ từ_điều
1588
+ ầu_ơ
1589
+ đạt
1590
+ quan_trọng
1591
+ cho_rồi
1592
+ như_ý
1593
+ bất_ngờ
1594
+ khó_nghe
1595
+ ít
1596
+ nào_cũng
1597
+ cô_ấy
1598
+ nhược_bằng
1599
+ chết_thật
1600
+ cơn
1601
+ thanh_chuyển
1602
+ quá_tay
1603
+ thoắt
1604
+ từng_đơn_vị
1605
+ đầy_phè
1606
+ bất_luận
1607
+ lấy_lại
1608
+ ăn_người
1609
+ trệt
1610
+ đến
1611
+ thế_mà
1612
+ thảo_nào
1613
+ quá_ư
1614
+ làm_sao
1615
+ biết_thế
1616
+ ơ
1617
+ nước_cùng
1618
+ đáng_lẽ
1619
+ thường
1620
+ mở_mang
1621
+ chung
1622
+ rút_cục
1623
+ đến_tuổi
1624
+ ngày_đến
1625
+ nhớ_lấy
1626
+ nhà_làm
1627
+ bởi
1628
+ hết_ráo
1629
+ nhận_được
1630
+ tránh_khỏi
1631
+ cho_về
1632
+ áng
1633
+ những
1634
+ ăn_cuộc
1635
+ ngoài_này
1636
+ tít_mù
1637
+ điểm_chính
1638
+ nhóm
1639
+ sau_cùng
1640
+ cách_đều
1641
+ bức
1642
+ qua
1643
+ tới
1644
+ tin_vào
1645
+ nhận_thấy
1646
+ nói_với
1647
+ vô_hình_trung
1648
+ ráo_nước
1649
+ đang_tay
1650
+ cô_mình
1651
+ về_không
1652
+ đến_cùng
1653
+ đây_rồi
1654
+ nhất_là
1655
+ chưa_dễ
1656
+ úi_dào
1657
+ tới_gần
1658
+ tốt_bạn
1659
+ thốt
1660
+ thốc
1661
+ đã_là
1662
+ làm_tắp_lự
1663
+ đúng_ngày
1664
+ ăn
1665
+ qua_chuyện
1666
+ chú_mày
1667
+ nghĩ_ra
1668
+ trước_nay
1669
+ nào_là
1670
+ chu_cha
1671
+ chẳng_những
1672
+ thật_sự
1673
+ dù_dì
1674
+ tìm
1675
+ vậy_mà
1676
+ để_cho
1677
+ chắc_lòng
1678
+ ví_bằng
1679
+ xoành_xoạch
1680
+ vèo
1681
+ đó
1682
+ sự
1683
+ rích
1684
+ làm_thế_nào
1685
+ bản_riêng
1686
+ bao_nhiêu
1687
+ đã
1688
+ đến_cùng_cực
1689
+ trước_tiên
1690
+ quả_thật
1691
+ đã_đủ
1692
+ như_vậy
1693
+ số
1694
+ quá_nhiều
1695
+ nói_riêng
1696
+ cao_lâu
1697
+ nên_tránh
1698
+ chuẩn_bị
1699
+ một_số
1700
+ không_được
1701
+ cho_đến_nỗi
1702
+ về_tay
1703
+ bán_dạ
1704
+ bằng_ấy
1705
+ phỏng_tính
1706
+ nhất_đán
1707
+ gì_đó
1708
+ tiếp_tục
1709
+ trước
1710
+ dù_sao
1711
+ tên_cái
1712
+ bao_giờ
1713
+ có_số
1714
+ mà_không
1715
+ lấy_sau
1716
+ cơ_chừng
1717
+ chăng
1718
+ theo_bước
1719
+ liên_quan
1720
+ dài_lời
1721
+ úi
1722
+ về_nước
1723
+ những_ai
1724
+ thêm
1725
+ dễ_sợ
1726
+ cổ_lai
1727
+ béng
1728
+ để_phần
1729
+ không_đầy
1730
+ phứt
1731
+ cơ_hồ
1732
+ dễ_dùng
1733
+ nên
1734
+ toé_khói
1735
+ phần_việc
1736
+ dữ_cách
1737
+ tuổi_cả
1738
+ cả_thảy
1739
+ còn_như
1740
+ bỏ_nhỏ
1741
+ nơi
1742
+ hay_nhỉ
1743
+ để_không
1744
+ mỗi_ngày
1745
+ cả_năm
1746
+ xin_vâng
1747
+ chia_sẻ
1748
+ có_được
1749
+ theo_như
1750
+ hay_không
1751
+ thứ_đến
1752
+ bởi_sao
1753
+ ít_thấy
1754
+ lại_nữa
1755
+ bấy
1756
+ amen
1757
+ chính_bản
1758
+ trong_lúc
1759
+ phắt
1760
+ nghe_tin
1761
+ lâu_ngày
1762
+ đối_với
1763
+ thanh
1764
+ ngoài_ra
1765
+ ít_nữa
1766
+ nào_đâu
1767
+ dù_gì
1768
+ cùng_chung
1769
+ thôi_việc
1770
+ cần_cấp
1771
+ bản_ý
1772
+ phỏng_nước
1773
+ lần_tìm
1774
+ nghe_chừng
1775
+ nói_tốt
1776
+ thường_số
1777
+ người_khác
1778
+ bộ_thuộc
1779
+ bên_có
1780
+ bằng_nấy
1781
+ dễ_ăn
1782
+ cái
1783
+ không_biết
1784
+ các
1785
+ tên_họ
1786
+ bao_lâu
1787
+ những_muốn
1788
+ cùng_tuổi
1789
+ số_cho_biết
1790
+ nói_xa
1791
+ nhanh_tay
1792
+ đặt_mình
1793
+ khó_nghĩ
1794
+ trước_sau
1795
+ từ_từ
1796
+ nhỏ_người
1797
+ gần_xa
1798
+ tấm
1799
+ tức_tốc
1800
+ từ_ấy
1801
+ buổi_sớm
1802
+ đúng_tuổi
1803
+ chơi
1804
+ dài
1805
+ mỗi_lúc
1806
+ luôn_luôn
1807
+ nhiệt_liệt
1808
+ không_bao_giờ
1809
+ thấp_xuống
1810
+ pho
1811
+ hoàn_toàn
1812
+ chung_nhau
1813
+ lên
1814
+ chung_chung
1815
+ chắc_người
1816
+ dẫn
1817
+ không_khỏi
1818
+ một_lúc
1819
+ ngày
1820
+ bỏ_mất
1821
+ trước_nhất
1822
+ lúc_khác
1823
+ lên_đến
1824
+ xa_xả
1825
+ so_với
1826
+ xem
1827
+ trong_ấy
1828
+ thế_ra
1829
+ ngay_lập_tức
1830
+ phải_cái
1831
+ ắt_thật
1832
+ nghe
1833
+ dễ_thường
1834
+ qua_lần
1835
+ xa_xa
1836
+ ư
1837
+ vì_sao
1838
+ lấy_giống
1839
+ chớ
1840
+ cô_quả
1841
+ lên_ngôi
1842
+ chị
1843
+ như_nhau
1844
+ chỉ
1845
+ ắt
1846
+ biết
1847
+ chớ_kể
1848
+ chớ_như
1849
+ mở_nước
1850
+ khác_nào
1851
+ chứ
1852
+ nước_lên
1853
+ cơ_hội
1854
+ nhà
1855
+ thực_ra
1856
+ họ_gần
1857
+ làm_lại
1858
+ ba_ngày
1859
+ tìm_bạn
1860
+ thấp
1861
+ là_là
1862
+ rồi_tay
1863
+ chọn_bên
1864
+ cũng_thế
1865
+ thấy
1866
+ số_phần
1867
+ ra_bộ
1868
+ từ
1869
+ nhìn_xuống
1870
+ tính_căn
1871
+ khi_nào
1872
+ vào_lúc
1873
+ nhận_biết
1874
+ căn
1875
+ hiện_tại
1876
+ từ_khi
1877
+ ơ_hay
1878
+
1879
+ phù_hợp
1880
+ thuộc
1881
+ tớ
1882
+ nghe_như
1883
+ chui_cha
1884
+ sớm
1885
+ ừ_nhé
1886
+ đưa_tin
1887
+ tuy_là
1888
+ thoạt_nghe
1889
+ ra_người
1890
+ xem_lại
1891
+ không_còn
1892
+ người_nhận
1893
+ tập_trung
1894
+ vấn_đề_quan_trọng
1895
+ nhà_khó
1896
+ vì_chưng
1897
+ vậy_ra
1898
+ thành_ra
1899
+ chúng_ông
1900
+ cảm_thấy
1901
+ xoẳn
1902
+ rốt_cục
1903
+ của_tin
1904
+ tôi_con
1905
+ những_là
1906
+ số_loại
1907
+ xon_xón
1908
+ vô_vàn
1909
+ từng_nhà
1910
+ đồng_thời
1911
+ gần_đến
1912
+ đến_đâu
1913
+ thay_đổi_tình_trạng
1914
+ là_cùng
1915
+ cũng_như
1916
+ đến_cả
1917
+ làm_cho
1918
+ bển
1919
+ bài_cái
1920
+ nếu_không
1921
+ lấy_thế
1922
+ cũng_vậy
1923
+ cấp_trực_tiếp
1924
+ luôn_tay
1925
+
1926
+ không_thể
1927
+ thường_thường
1928
+ cần_gì
1929
+ mọi_khi
1930
+ đáo_để
1931
+ ăn_làm
1932
+ thanh_điều_kiện
1933
+ đầy_tuổi
1934
+ đưa_vào
1935
+ đưa_xuống
1936
+ bất_nhược
1937
+ khiến
1938
+ thời_gian_sử_dụng
1939
+ cái_họ
1940
+ hết
1941
+ lại
1942
+ thế_thế
1943
+ dần_dần
tutorial.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from retrieval.retrieval import Retrieval, BM25
2
+
3
+ # retrieval = Retrieval(k=4)
4
+ # contexts = retrieval.get_context()
5
+
6
+
7
+ docs = open('../document2.txt', encoding='utf-8').read()
8
+ retrieval = Retrieval(docs=docs)
9
+ # retrieval.tuning(docs)
10
+ contexts = retrieval.get_context("Khi nào bệnh nhên nên đến bệnh viện?")
11
+ for context in contexts:
12
+ print(context)
vietAI-base-MRC/config.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "VietAI/vit5-base",
3
+ "architectures": [
4
+ "T5ForConditionalGeneration"
5
+ ],
6
+ "d_ff": 3072,
7
+ "d_kv": 64,
8
+ "d_model": 768,
9
+ "decoder_start_token_id": 0,
10
+ "dense_act_fn": "relu",
11
+ "dropout_rate": 0.1,
12
+ "eos_token_id": 1,
13
+ "feed_forward_proj": "relu",
14
+ "initializer_factor": 1.0,
15
+ "is_encoder_decoder": true,
16
+ "is_gated_act": false,
17
+ "layer_norm_epsilon": 1e-06,
18
+ "model_type": "t5",
19
+ "n_positions": 512,
20
+ "num_decoder_layers": 12,
21
+ "num_heads": 12,
22
+ "num_layers": 12,
23
+ "output_past": true,
24
+ "pad_token_id": 0,
25
+ "relative_attention_max_distance": 128,
26
+ "relative_attention_num_buckets": 32,
27
+ "torch_dtype": "float32",
28
+ "transformers_version": "4.29.2",
29
+ "use_cache": true,
30
+ "vocab_size": 36096
31
+ }
vietAI-base-MRC/generation_config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "decoder_start_token_id": 0,
4
+ "eos_token_id": 1,
5
+ "pad_token_id": 0,
6
+ "transformers_version": "4.29.2"
7
+ }
vietAI-base-MRC/pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2c538908b267e54de3b84ef29e9a0362855f2cf2b7813ddbfc2edb20723efa41
3
+ size 903892625