Spaces:
Sleeping
Sleeping
Test
Browse files- DockerFile +14 -0
- app.py +54 -0
- classify_model.py +185 -0
- normal_dataset.json +564 -0
- requirements.txt +11 -0
- toxic_dataset.json +666 -0
DockerFile
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
FROM python:3.9
|
3 |
+
|
4 |
+
RUN useradd -m -u 1000 user
|
5 |
+
USER user
|
6 |
+
ENV PATH="/home/user/.local/bin:$PATH"
|
7 |
+
|
8 |
+
WORKDIR /app
|
9 |
+
|
10 |
+
COPY --chown=user ./requirements.txt requirements.txt
|
11 |
+
RUN pip install --no-cache-dir --upgrade -r requirements.txt
|
12 |
+
|
13 |
+
COPY --chown=user . /app
|
14 |
+
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
|
app.py
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from flask import Flask, request, jsonify
|
2 |
+
from classify_model import model, tokenizer
|
3 |
+
import torch
|
4 |
+
import numpy as np
|
5 |
+
import os
|
6 |
+
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
|
7 |
+
import gdown
|
8 |
+
from underthesea import word_tokenize
|
9 |
+
|
10 |
+
|
11 |
+
if not os.path.exists("save_weights.pt"):
|
12 |
+
file_id = "1JeQ100QELbCCjCozF5SsHT1ca08Vvfuw"
|
13 |
+
url = f"https://drive.google.com/uc?id={file_id}"
|
14 |
+
print("Downloading save_weights.pt from Google Drive...")
|
15 |
+
gdown.download(url, "save_weights.pt", quiet=False)
|
16 |
+
if not os.path.exists("save_weights.pt"):
|
17 |
+
raise FileNotFoundError("Failed to download save_weights.pt")
|
18 |
+
|
19 |
+
model.load_state_dict(torch.load("save_weights.pt"))
|
20 |
+
model.eval()
|
21 |
+
|
22 |
+
app = Flask(__name__)
|
23 |
+
|
24 |
+
def predict_toxic(sentence):
|
25 |
+
# tokens = rdrsegmenter.tokenize(sentence)
|
26 |
+
# statement = ""
|
27 |
+
# for token in tokens:
|
28 |
+
# statement += " ".join(token)
|
29 |
+
# sentence = statement
|
30 |
+
sentence = word_tokenize(sentence, format="text")
|
31 |
+
sequence = tokenizer.encode(sentence)
|
32 |
+
while len(sequence) == 20:
|
33 |
+
sequence.insert(0, 0)
|
34 |
+
padded = torch.tensor([sequence])
|
35 |
+
with torch.no_grad():
|
36 |
+
preds = model(padded)
|
37 |
+
preds = np.argmax(preds.cpu().numpy(), axis=1)
|
38 |
+
return preds[0]
|
39 |
+
|
40 |
+
|
41 |
+
@app.route('/predict', methods=['POST'])
|
42 |
+
def predict():
|
43 |
+
data = request.json
|
44 |
+
sentence = data.get('sentence', '')
|
45 |
+
if not sentence:
|
46 |
+
return jsonify({'error': 'No sentence provided'}), 400
|
47 |
+
result = predict_toxic(sentence)
|
48 |
+
print("Dự đoán:", result, type(result))
|
49 |
+
return jsonify({'toxic': int(result)})
|
50 |
+
|
51 |
+
if __name__ == "__main__":
|
52 |
+
port = int(os.environ.get("PORT", 5000))
|
53 |
+
app.run(host="0.0.0.0", port=port)
|
54 |
+
# app.run(host="0.0.0.0", port=5001)
|
classify_model.py
ADDED
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import pandas as pd
|
3 |
+
import torch
|
4 |
+
import torch.nn as nn
|
5 |
+
from sklearn.model_selection import train_test_split
|
6 |
+
from sklearn.metrics import classification_report
|
7 |
+
from torch.optim import optimizer
|
8 |
+
import transformers
|
9 |
+
from transformers import AutoModel, AutoTokenizer
|
10 |
+
from keras.preprocessing.sequence import pad_sequences
|
11 |
+
import json
|
12 |
+
#from vncorenlp import VnCoreNLP
|
13 |
+
from sklearn.utils import shuffle
|
14 |
+
from torch.optim import AdamW
|
15 |
+
from torch.utils.data import TensorDataset, DataLoader, RandomSampler
|
16 |
+
from underthesea import word_tokenize
|
17 |
+
|
18 |
+
#Đọc dữ liệu
|
19 |
+
def get_data(all_path):
|
20 |
+
sentences=[]
|
21 |
+
labels=[]
|
22 |
+
for i in all_path:
|
23 |
+
try:
|
24 |
+
with open(i, "r", encoding='utf-8') as f:
|
25 |
+
datastore = json.load(f)
|
26 |
+
except FileNotFoundError:
|
27 |
+
print(f"Error: File {i} not found")
|
28 |
+
continue
|
29 |
+
except json.JSONDecodeError:
|
30 |
+
print(f"Error: File {i} contains invalid JSON")
|
31 |
+
continue
|
32 |
+
for item in datastore:
|
33 |
+
sentences.append(item["sentences"])
|
34 |
+
labels.append(item["toxic"])
|
35 |
+
return sentences, labels
|
36 |
+
|
37 |
+
|
38 |
+
#Tách từ tiếng việt
|
39 |
+
# rdrsegmenter=VnCoreNLP("vncorenlp/VnCoreNLP-1.1.1.jar", annotators="wseg", max_heap_size='-Xmx500m')
|
40 |
+
# def sentences_segment(sentences):
|
41 |
+
# for i in range(len(sentences)):
|
42 |
+
# tokens=rdrsegmenter.tokenize(sentences[i])
|
43 |
+
# statement=""
|
44 |
+
# for token in tokens:
|
45 |
+
# statement+=" ".join(token)
|
46 |
+
# sentences[i]=statement
|
47 |
+
def sentences_segment(sentences):
|
48 |
+
for i in range(len(sentences)):
|
49 |
+
# word_tokenize trả về chuỗi các từ cách nhau bằng dấu space
|
50 |
+
sentences[i] = word_tokenize(sentences[i], format="text")
|
51 |
+
|
52 |
+
#Mã hóa các câu thành Token ID và pad chuỗi về độ dài maxlen
|
53 |
+
phobert=AutoModel.from_pretrained('vinai/phobert-base')
|
54 |
+
tokenizer=AutoTokenizer.from_pretrained('vinai/phobert-base')
|
55 |
+
def shuffle_and_tokenize(sentences,labels,maxlen):
|
56 |
+
sentences,labels=shuffle(sentences,labels)
|
57 |
+
sequences=[tokenizer.encode(i) for i in sentences]
|
58 |
+
labels=[int(i) for i in labels]
|
59 |
+
padded=pad_sequences(sequences, maxlen=maxlen, padding="pre")
|
60 |
+
return padded, labels
|
61 |
+
|
62 |
+
def check_maxlen(sentences):
|
63 |
+
sentences_len=[len(i.split()) for i in sentences]
|
64 |
+
return max(sentences_len)
|
65 |
+
|
66 |
+
|
67 |
+
#Chia dữ liệu huấn luyện/val/test
|
68 |
+
def split_data(padded, labels):
|
69 |
+
padded=torch.tensor(padded)
|
70 |
+
labels=torch.tensor(labels)
|
71 |
+
X_train,X_,y_train,y_=train_test_split(padded, labels,random_state=2018, train_size=0.8, stratify=labels)
|
72 |
+
X_val,X_test, y_val, y_test=train_test_split(X_, y_, random_state=2018, train_size=0.5, stratify=y_)
|
73 |
+
return X_train,X_val,X_test, y_train,y_val, y_test
|
74 |
+
|
75 |
+
|
76 |
+
#Tạo DataLoader
|
77 |
+
def Data_Loader(X_train,X_val,y_train,y_val):
|
78 |
+
train_data=TensorDataset(X_train,y_train)
|
79 |
+
train_sampler=RandomSampler(train_data)
|
80 |
+
train_dataloader=DataLoader(train_data, sampler=train_sampler,batch_size=2)
|
81 |
+
val_data=TensorDataset(X_val,y_val)
|
82 |
+
val_sampler=RandomSampler(val_data)
|
83 |
+
val_dataloader=DataLoader(val_data, sampler=val_sampler,batch_size=2)
|
84 |
+
return train_dataloader, val_dataloader
|
85 |
+
|
86 |
+
# Chuẩn bị dữ liệu (chỉ chạy 1 lần ở train_model.py)
|
87 |
+
sentences,labels=get_data(['toxic_dataset.json','normal_dataset.json'])
|
88 |
+
sentences_segment(sentences)
|
89 |
+
padded,labels=shuffle_and_tokenize(sentences,labels,check_maxlen(sentences))
|
90 |
+
X_train,X_val,X_test, y_train,y_val, y_test=split_data(padded, labels)
|
91 |
+
train_dataloader, val_dataloader=Data_Loader(X_train,X_val,y_train,y_val)
|
92 |
+
|
93 |
+
# Freeze PhoBERT để không train lại
|
94 |
+
for param in phobert.parameters():
|
95 |
+
param.requires_grad=False
|
96 |
+
|
97 |
+
class classify(nn.Module):
|
98 |
+
def __init__(self, phobert, number_of_category):
|
99 |
+
super(classify,self).__init__()
|
100 |
+
self.phobert=phobert
|
101 |
+
self.relu=nn.ReLU()
|
102 |
+
self.dropout=nn.Dropout(0.1)
|
103 |
+
self.first_function=nn.Linear(768, 512)
|
104 |
+
self.second_function=nn.Linear(512, 32)
|
105 |
+
self.third_function=nn.Linear(32,number_of_category)
|
106 |
+
self.softmax=nn.LogSoftmax(dim=1)
|
107 |
+
|
108 |
+
def forward(self, input):
|
109 |
+
x=self.phobert(input)
|
110 |
+
x=self.first_function(x[1])
|
111 |
+
x=self.relu(x)
|
112 |
+
x=self.dropout(x)
|
113 |
+
x=self.second_function(x)
|
114 |
+
x=self.relu(x)
|
115 |
+
x=self.third_function(x)
|
116 |
+
x=self.softmax(x)
|
117 |
+
return x
|
118 |
+
|
119 |
+
cross_entropy=nn.NLLLoss()
|
120 |
+
model=classify(phobert,2)
|
121 |
+
optimizer=AdamW(model.parameters(),lr=1e-5)
|
122 |
+
|
123 |
+
#Train / Evaluate
|
124 |
+
def train():
|
125 |
+
model.train()
|
126 |
+
total_loss=0
|
127 |
+
total_preds=[]
|
128 |
+
for step , batch in enumerate(train_dataloader):
|
129 |
+
if step%50==0 and step!=0:
|
130 |
+
print("BATCH {} of {}".format(step, len(train_dataloader)))
|
131 |
+
|
132 |
+
input,labels=batch
|
133 |
+
model.zero_grad()
|
134 |
+
preds=model(input)
|
135 |
+
loss=cross_entropy(preds, labels)
|
136 |
+
total_loss+=loss.item()
|
137 |
+
loss.backward()
|
138 |
+
torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)
|
139 |
+
optimizer.step()
|
140 |
+
preds=preds.detach().cpu().numpy()
|
141 |
+
total_preds.append(preds)
|
142 |
+
avg_loss=total_loss/len(train_dataloader)
|
143 |
+
total_preds=np.concatenate(total_preds,axis=0)
|
144 |
+
return avg_loss, total_preds
|
145 |
+
|
146 |
+
def evaluate():
|
147 |
+
model.eval()
|
148 |
+
total_loss=0
|
149 |
+
total_preds=[]
|
150 |
+
for step, batch in enumerate(val_dataloader):
|
151 |
+
if step%50==0 and step!=0:
|
152 |
+
print("BATCH {} of {}".format(step, len(val_dataloader)))
|
153 |
+
input,labels=batch
|
154 |
+
with torch.no_grad():
|
155 |
+
preds=model(input)
|
156 |
+
loss=cross_entropy(preds, labels)
|
157 |
+
total_loss+=loss.item()
|
158 |
+
preds=preds.detach().cpu().numpy()
|
159 |
+
total_preds.append(preds)
|
160 |
+
avg_loss=total_loss/len(val_dataloader)
|
161 |
+
total_preds=np.concatenate(total_preds,axis=0)
|
162 |
+
return avg_loss, total_preds
|
163 |
+
|
164 |
+
|
165 |
+
#Huấn luyện toàn bộ
|
166 |
+
def run(epochs):
|
167 |
+
best_valid_loss=float("inf")
|
168 |
+
train_losses=[]
|
169 |
+
valid_losses=[]
|
170 |
+
for epoch in range(epochs):
|
171 |
+
print("EPOCH {}/{}".format(epoch+1, epochs))
|
172 |
+
train_loss,_ =train()
|
173 |
+
valid_loss,_ =evaluate()
|
174 |
+
if valid_loss < best_valid_loss:
|
175 |
+
best_valid_loss = valid_loss
|
176 |
+
torch.save(model.state_dict(),"save_weights.pt")
|
177 |
+
train_losses.append(train_loss)
|
178 |
+
valid_losses.append(valid_loss)
|
179 |
+
print(f"Train Loss: {train_loss}, Val Loss: {valid_loss}")
|
180 |
+
#print(f"Train Loss: {train_loss:.4f}, Val Loss: {valid_loss:.4f}")
|
181 |
+
# print(train_loss)
|
182 |
+
# print(valid_loss)
|
183 |
+
|
184 |
+
if __name__ == "__main__":
|
185 |
+
print("Module classify_model.py đã được load. Không chạy trực tiếp.")
|
normal_dataset.json
ADDED
@@ -0,0 +1,564 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"sentences": "đồng hồ đẹp quá, đúng gu của mình luôn",
|
4 |
+
"toxic": "0"
|
5 |
+
},
|
6 |
+
{
|
7 |
+
"sentences": "giao hàng nhanh, sản phẩm như mô tả",
|
8 |
+
"toxic": "0"
|
9 |
+
},
|
10 |
+
{
|
11 |
+
"sentences": "mình đã mua tặng bố, rất ưng ý",
|
12 |
+
"toxic": "0"
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"sentences": "bài viết rất hay, giúp mình hiểu rõ hơn về cách chọn đồng hồ",
|
16 |
+
"toxic": "0"
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"sentences": "mình thích kiểu dáng này, sang trọng và tinh tế",
|
20 |
+
"toxic": "0"
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"sentences": "dịch vụ chăm sóc khách hàng tốt, nhân viên tư vấn nhiệt tình",
|
24 |
+
"toxic": "0"
|
25 |
+
},
|
26 |
+
{
|
27 |
+
"sentences": "bài blog chia sẻ kiến thức rất bổ ích",
|
28 |
+
"toxic": "0"
|
29 |
+
},
|
30 |
+
{
|
31 |
+
"sentences": "đồng hồ lên tay nhẹ, đeo cả ngày không mỏi",
|
32 |
+
"toxic": "0"
|
33 |
+
},
|
34 |
+
{
|
35 |
+
"sentences": "sản phẩm có hộp đựng chắc chắn, sang xịn",
|
36 |
+
"toxic": "0"
|
37 |
+
},
|
38 |
+
{
|
39 |
+
"sentences": "web load nhanh, dễ tìm kiếm sản phẩm",
|
40 |
+
"toxic": "0"
|
41 |
+
},
|
42 |
+
{
|
43 |
+
"sentences": "thiết kế website đẹp mắt, dễ dùng trên điện thoại",
|
44 |
+
"toxic": "0"
|
45 |
+
},
|
46 |
+
{
|
47 |
+
"sentences": "giá cả hợp lý với chất lượng sản phẩm",
|
48 |
+
"toxic": "0"
|
49 |
+
},
|
50 |
+
{
|
51 |
+
"sentences": "mình đã giới thiệu cho bạn bè vì thấy đáng tiền",
|
52 |
+
"toxic": "0"
|
53 |
+
},
|
54 |
+
{
|
55 |
+
"sentences": "bài chia sẻ rõ ràng, hình ảnh minh hoạ dễ hiểu",
|
56 |
+
"toxic": "0"
|
57 |
+
},
|
58 |
+
{
|
59 |
+
"sentences": "cảm ơn shop đã hỗ trợ đổi size dây nhanh chóng",
|
60 |
+
"toxic": "0"
|
61 |
+
},
|
62 |
+
{
|
63 |
+
"sentences": "đã mua lần thứ 2 ở đây, vẫn rất hài lòng",
|
64 |
+
"toxic": "0"
|
65 |
+
},
|
66 |
+
{
|
67 |
+
"sentences": "blog cập nhật xu hướng đồng hồ liên tục, mình thích điều này",
|
68 |
+
"toxic": "0"
|
69 |
+
},
|
70 |
+
{
|
71 |
+
"sentences": "đồng hồ phù hợp để đeo đi làm lẫn đi chơi",
|
72 |
+
"toxic": "0"
|
73 |
+
},
|
74 |
+
{
|
75 |
+
"sentences": "màu sắc giống hình, không bị lệch màu",
|
76 |
+
"toxic": "0"
|
77 |
+
},
|
78 |
+
{
|
79 |
+
"sentences": "mình tìm được mẫu đồng hồ yêu thích nhờ bài viết này",
|
80 |
+
"toxic": "0"
|
81 |
+
},
|
82 |
+
{
|
83 |
+
"sentences": "Đồng hồ chạy rất êm, pin trâu dùng được lâu",
|
84 |
+
"toxic": "0"
|
85 |
+
},
|
86 |
+
{
|
87 |
+
"sentences": "Shop đóng gói cẩn thận, hộp không bị méo mó gì cả",
|
88 |
+
"toxic": "0"
|
89 |
+
},
|
90 |
+
{
|
91 |
+
"sentences": "Mặt đồng hồ sáng bóng, nhìn rõ số dưới ánh sáng yếu",
|
92 |
+
"toxic": "0"
|
93 |
+
},
|
94 |
+
{
|
95 |
+
"sentences": "Dây da mềm, không bị cấn hay ngứa khi đeo",
|
96 |
+
"toxic": "0"
|
97 |
+
},
|
98 |
+
{
|
99 |
+
"sentences": "Nhận được quà tặng kèm từ shop, bất ngờ và vui lắm ạ",
|
100 |
+
"toxic": "0"
|
101 |
+
},
|
102 |
+
{
|
103 |
+
"sentences": "Kiểu dáng unisex, cả nam lẫn nữ đeo đều đẹp",
|
104 |
+
"toxic": "0"
|
105 |
+
},
|
106 |
+
{
|
107 |
+
"sentences": "Chính sách bảo hành rõ ràng, yên tâm khi mua",
|
108 |
+
"toxic": "0"
|
109 |
+
},
|
110 |
+
{
|
111 |
+
"sentences": "Mẫu mã đa dạng, tha hồ lựa chọn theo sở thích",
|
112 |
+
"toxic": "0"
|
113 |
+
},
|
114 |
+
{
|
115 |
+
"sentences": "Nhân viên gọi điện xác nhận đơn hàng rất chuyên nghiệp",
|
116 |
+
"toxic": "0"
|
117 |
+
},
|
118 |
+
{
|
119 |
+
"sentences": "Đồng hồ nhỏ gọn nhưng hiển thị đầy đủ thông tin cần thiết",
|
120 |
+
"toxic": "0"
|
121 |
+
},
|
122 |
+
{
|
123 |
+
"sentences": "Chất liệu chống xước tốt, dùng 2 tháng vẫn như mới",
|
124 |
+
"toxic": "0"
|
125 |
+
},
|
126 |
+
{
|
127 |
+
"sentences": "Bấm giờ thể thao chính xác, phù hợp cho người tập gym",
|
128 |
+
"toxic": "0"
|
129 |
+
},
|
130 |
+
{
|
131 |
+
"sentences": "Lần đầu mua đồng hồ online mà trải nghiệm suôn sẻ",
|
132 |
+
"toxic": "0"
|
133 |
+
},
|
134 |
+
{
|
135 |
+
"sentences": "Video review sản phẩm chi tiết giúp mình quyết định nhanh hơn",
|
136 |
+
"toxic": "0"
|
137 |
+
},
|
138 |
+
{
|
139 |
+
"sentences": "Chế độ hậu mãi tốt, được nhắc thay pin miễn phí",
|
140 |
+
"toxic": "0"
|
141 |
+
},
|
142 |
+
{
|
143 |
+
"sentences": "Thiết kế độc đáo, đi đâu cũng được khen",
|
144 |
+
"toxic": "0"
|
145 |
+
},
|
146 |
+
{
|
147 |
+
"sentences": "Đèn nền đồng hồ sáng rõ, xem giờ ban đêm dễ dàng",
|
148 |
+
"toxic": "0"
|
149 |
+
},
|
150 |
+
{
|
151 |
+
"sentences": "Chống nước tốt, đi mưa nhỏ không lo hỏng",
|
152 |
+
"toxic": "0"
|
153 |
+
},
|
154 |
+
{
|
155 |
+
"sentences": "Phụ kiện đi kèm đầy đủ từ khăn lau đến hướng dẫn sử dụng",
|
156 |
+
"toxic": "0"
|
157 |
+
},
|
158 |
+
{
|
159 |
+
"sentences": "Màu đồng hồ dễ phối đồ, mặc áo gì cũng hợp",
|
160 |
+
"toxic": "0"
|
161 |
+
},
|
162 |
+
{
|
163 |
+
"sentences": "Cảm ơn shop đã tư vấn size dây vừa vặn với cổ tay mình",
|
164 |
+
"toxic": "0"
|
165 |
+
},
|
166 |
+
{
|
167 |
+
"sentences": "Đồng hồ nhẹ hơn mình tưởng, đeo rất thoải mái",
|
168 |
+
"toxic": "0"
|
169 |
+
},
|
170 |
+
{
|
171 |
+
"sentences": "Giao hàng đúng hẹn, shipper thân thiện",
|
172 |
+
"toxic": "0"
|
173 |
+
},
|
174 |
+
{
|
175 |
+
"sentences": "Đã mua 3 cái ở đây làm quà tặng đều được đánh giá cao",
|
176 |
+
"toxic": "0"
|
177 |
+
},
|
178 |
+
{
|
179 |
+
"sentences": "Chức năng đếm bước chân hoạt động chính xác",
|
180 |
+
"toxic": "0"
|
181 |
+
},
|
182 |
+
{
|
183 |
+
"sentences": "Mặt kính cứng cáp, va chạm nhẹ không bị trầy",
|
184 |
+
"toxic": "0"
|
185 |
+
},
|
186 |
+
{
|
187 |
+
"sentences": "Hướng dẫn sử dụng bằng tiếng Việt rất dễ hiểu",
|
188 |
+
"toxic": "0"
|
189 |
+
},
|
190 |
+
{
|
191 |
+
"sentences": "Thích nhất là chế độ báo thức êm ái không gây giật mình",
|
192 |
+
"toxic": "0"
|
193 |
+
},
|
194 |
+
{
|
195 |
+
"sentences": "Đồng hồ kết nối bluetooth ổn định với điện thoại",
|
196 |
+
"toxic": "0"
|
197 |
+
},
|
198 |
+
{
|
199 |
+
"sentences": "Mua trúng đợt khuyến mãi nên giá rất tốt",
|
200 |
+
"toxic": "0"
|
201 |
+
},
|
202 |
+
{
|
203 |
+
"sentences": "Nhân viên tư vấn rất am hiểu, giúp mình chọn được mẫu đồng hồ ưng ý",
|
204 |
+
"toxic": "0"
|
205 |
+
},
|
206 |
+
{
|
207 |
+
"sentences": "Bạn tư vấn viên tên Linh rất dễ thương, hỗ trợ mình từ A-Z",
|
208 |
+
"toxic": "0"
|
209 |
+
},
|
210 |
+
{
|
211 |
+
"sentences": "Mình hỏi đêm mà nhân viên vẫn trả lời nhanh, nhiệt tình quá!",
|
212 |
+
"toxic": "0"
|
213 |
+
},
|
214 |
+
{
|
215 |
+
"sentences": "Tư vấn đúng nhu cầu, không ép mua hàng đắt tiền",
|
216 |
+
"toxic": "0"
|
217 |
+
},
|
218 |
+
{
|
219 |
+
"sentences": "Nhân viên gọi điện tư vấn kỹ về chế độ bảo hành trước khi mua",
|
220 |
+
"toxic": "0"
|
221 |
+
},
|
222 |
+
{
|
223 |
+
"sentences": "Rất cảm ơn bạn tư vấn đã giúp mình đổi size dây nhanh chóng",
|
224 |
+
"toxic": "0"
|
225 |
+
},
|
226 |
+
{
|
227 |
+
"sentences": "Nhân viên tư vấn rõ ràng, không lan man, đúng trọng tâm mình cần",
|
228 |
+
"toxic": "0"
|
229 |
+
},
|
230 |
+
{
|
231 |
+
"sentences": "Mình được tư vấn kỹ về cách sử dụng đồng hồ thông minh, rất hữu ích",
|
232 |
+
"toxic": "0"
|
233 |
+
},
|
234 |
+
{
|
235 |
+
"sentences": "Nhân viên còn gửi thêm video hướng dẫn sử dụng qua Zalo, quá chu đáo!",
|
236 |
+
"toxic": "0"
|
237 |
+
},
|
238 |
+
{
|
239 |
+
"sentences": "Tư vấn viên biết cách phối đồng hồ theo phong cách, mình rất thích",
|
240 |
+
"toxic": "0"
|
241 |
+
},
|
242 |
+
{
|
243 |
+
"sentences": "Đặt sáng nhận chiều, nhanh hơn cả mong đợi!",
|
244 |
+
"toxic": "0"
|
245 |
+
},
|
246 |
+
{
|
247 |
+
"sentences": "Giao hàng tốc độ, shipper thân thiện, đóng gói kỹ càng",
|
248 |
+
"toxic": "0"
|
249 |
+
},
|
250 |
+
{
|
251 |
+
"sentences": "Mới đặt hôm qua trưa, sáng nay đã nhận được rồi",
|
252 |
+
"toxic": "0"
|
253 |
+
},
|
254 |
+
{
|
255 |
+
"sentences": "Hộp đồng hồ được bọc xốp kín, không một vết trầy xước",
|
256 |
+
"toxic": "0"
|
257 |
+
},
|
258 |
+
{
|
259 |
+
"sentences": "Dù ở xa nhưng shop giao cực nhanh, chỉ 2 ngày đã nhận hàng",
|
260 |
+
"toxic": "0"
|
261 |
+
},
|
262 |
+
{
|
263 |
+
"sentences": "Shipper gọi điện trước khi giao, đúng giờ hẹn",
|
264 |
+
"toxic": "0"
|
265 |
+
},
|
266 |
+
{
|
267 |
+
"sentences": "Đóng gói chắc chắn, có cả tem chống hàng giả",
|
268 |
+
"toxic": "0"
|
269 |
+
},
|
270 |
+
{
|
271 |
+
"sentences": "Free ship mà vẫn giao nhanh, quá đã!",
|
272 |
+
"toxic": "0"
|
273 |
+
},
|
274 |
+
{
|
275 |
+
"sentences": "Nhận hàng đúng ngày sinh nhật, cảm ơn shop nhiều!",
|
276 |
+
"toxic": "0"
|
277 |
+
},
|
278 |
+
{
|
279 |
+
"sentences": "Giao hàng nhanh đến mức mình không kịp mong ngóng",
|
280 |
+
"toxic": "0"
|
281 |
+
},
|
282 |
+
{
|
283 |
+
"sentences": "Web load nhanh như chớp, lướt không bị giật",
|
284 |
+
"toxic": "0"
|
285 |
+
},
|
286 |
+
{
|
287 |
+
"sentences": "Giao diện đẹp, bố cục rõ ràng, dễ tìm sản phẩm",
|
288 |
+
"toxic": "0"
|
289 |
+
},
|
290 |
+
{
|
291 |
+
"sentences": "Thanh toán một lần là xong, không bị lỗi như nhiều web khác",
|
292 |
+
"toxic": "0"
|
293 |
+
},
|
294 |
+
{
|
295 |
+
"sentences": "Tìm kiếm thông minh, gõ vài chữ đã ra đúng mẫu mình cần",
|
296 |
+
"toxic": "0"
|
297 |
+
},
|
298 |
+
{
|
299 |
+
"sentences": "Có chế độ xem ảnh 360 độ, nhìn đồng hồ rất rõ nét",
|
300 |
+
"toxic": "0"
|
301 |
+
},
|
302 |
+
{
|
303 |
+
"sentences": "Web hiển thị tốt trên cả điện thoại, không bị vỡ giao diện",
|
304 |
+
"toxic": "0"
|
305 |
+
},
|
306 |
+
{
|
307 |
+
"sentences": "Có bộ lọc theo giá, màu sắc, thương hiệu rất tiện",
|
308 |
+
"toxic": "0"
|
309 |
+
},
|
310 |
+
{
|
311 |
+
"sentences": "Thông báo giảm giá hiển thị rõ ràng, không bị pop-up quảng cáo rác",
|
312 |
+
"toxic": "0"
|
313 |
+
},
|
314 |
+
{
|
315 |
+
"sentences": "Có section 'Sản phẩm đã xem' giúp mình so sánh dễ dàng",
|
316 |
+
"toxic": "0"
|
317 |
+
},
|
318 |
+
{
|
319 |
+
"sentences": "Web còn có chế độ ban đêm, đỡ hại mắt khi mua hàng đêm khuya",
|
320 |
+
"toxic": "0"
|
321 |
+
},
|
322 |
+
{
|
323 |
+
"sentences": "Bài viết so sánh đồng hồ nam và nữ giúp mình chọn quà dễ dàng",
|
324 |
+
"toxic": "0"
|
325 |
+
},
|
326 |
+
{
|
327 |
+
"sentences": "Hướng dẫn phân biệt đồng hồ chính hãng rất chi tiết, cảm ơn tác giả!",
|
328 |
+
"toxic": "0"
|
329 |
+
},
|
330 |
+
{
|
331 |
+
"sentences": "Mình đọc xong bài '5 tiêu chí chọn đồng hồ đi làm' và quyết định mua luôn",
|
332 |
+
"toxic": "0"
|
333 |
+
},
|
334 |
+
{
|
335 |
+
"sentences": "Blog cập nhật xu hướng đồng hồ 2024 hay quá, mình bookmark ngay",
|
336 |
+
"toxic": "0"
|
337 |
+
},
|
338 |
+
{
|
339 |
+
"sentences": "Bài review đồng hồ thể thao có video minh họa rất trực quan",
|
340 |
+
"toxic": "0"
|
341 |
+
},
|
342 |
+
{
|
343 |
+
"sentences": "Đọc xong bài 'Cách bảo quản đồng hồ da' mới biết mình từng sai lầm",
|
344 |
+
"toxic": "0"
|
345 |
+
},
|
346 |
+
{
|
347 |
+
"sentences": "Tác gi�� viết dễ hiểu, không dùng từ ngữ quá chuyên môn",
|
348 |
+
"toxic": "0"
|
349 |
+
},
|
350 |
+
{
|
351 |
+
"sentences": "Mỗi bài đều có phần FAQ giải đáp thắc mắc, rất thiết thực",
|
352 |
+
"toxic": "0"
|
353 |
+
},
|
354 |
+
{
|
355 |
+
"sentences": "Bài viết có link dẫn đến sản phẩm liên quan, tiện cho người đọc",
|
356 |
+
"toxic": "0"
|
357 |
+
},
|
358 |
+
{
|
359 |
+
"sentences": "Blog còn chia sẻ phong thủy đeo đồng hồ theo tuổi, thú vị ghê!",
|
360 |
+
"toxic": "0"
|
361 |
+
},
|
362 |
+
{
|
363 |
+
"sentences": "Được bảo hành miễn phí thêm 6 tháng so với cam kết",
|
364 |
+
"toxic": "0"
|
365 |
+
},
|
366 |
+
{
|
367 |
+
"sentences": "Shop gửi email nhắc lịch bảo dưỡng đồng hồ định kỳ",
|
368 |
+
"toxic": "0"
|
369 |
+
},
|
370 |
+
{
|
371 |
+
"sentences": "Đổi trả dễ dàng trong 7 ngày, không hỏi nhiều lý do",
|
372 |
+
"toxic": "0"
|
373 |
+
},
|
374 |
+
{
|
375 |
+
"sentences": "Mua 1 lần được tặng voucher 10% cho lần sau",
|
376 |
+
"toxic": "0"
|
377 |
+
},
|
378 |
+
{
|
379 |
+
"sentences": "Chính sách tích điểm đổi quà hấp dẫn, mình đã đổi được túi xách",
|
380 |
+
"toxic": "0"
|
381 |
+
},
|
382 |
+
{
|
383 |
+
"sentences": "Đang đợt sale lớn, mua 1 được giảm thêm 20% nữa, hời quá!",
|
384 |
+
"toxic": "0"
|
385 |
+
},
|
386 |
+
{
|
387 |
+
"sentences": "Giá sale chỉ bằng nửa giá gốc, chất lượng vẫn đỉnh",
|
388 |
+
"toxic": "0"
|
389 |
+
},
|
390 |
+
{
|
391 |
+
"sentences": "Mua đồng hồ cao cấp mà được giảm tận 3 triệu, đúng là trúng quà",
|
392 |
+
"toxic": "0"
|
393 |
+
},
|
394 |
+
{
|
395 |
+
"sentences": "Flash sale 12h toàn sản phẩm hot, tranh thủ mua liền tay",
|
396 |
+
"toxic": "0"
|
397 |
+
},
|
398 |
+
{
|
399 |
+
"sentences": "Khuyến mãi cuối năm, đồng hồ đẹp mà giá chỉ từ 500k",
|
400 |
+
"toxic": "0"
|
401 |
+
},
|
402 |
+
{
|
403 |
+
"sentences": "Mua 2 tặng 1, tha hồ mix đồng hồ đi làm và đi chơi",
|
404 |
+
"toxic": "0"
|
405 |
+
},
|
406 |
+
{
|
407 |
+
"sentences": "Được tặng kèm dây đeo silicon xịn khi mua đồng hồ thông minh",
|
408 |
+
"toxic": "0"
|
409 |
+
},
|
410 |
+
{
|
411 |
+
"sentences": "Giảm giá 50% cho sinh viên, chỉ cần show thẻ là được ưu đãi",
|
412 |
+
"toxic": "0"
|
413 |
+
},
|
414 |
+
{
|
415 |
+
"sentences": "Sale đồng hồ nữ dịp 8/3, mua ngay kẻo hết",
|
416 |
+
"toxic": "0"
|
417 |
+
},
|
418 |
+
{
|
419 |
+
"sentences": "Mua combo 2 đồng hồ được free ship toàn quốc",
|
420 |
+
"toxic": "0"
|
421 |
+
},
|
422 |
+
{
|
423 |
+
"sentences": "Được tặng thêm hộp đựng sang xịn trị giá 500k",
|
424 |
+
"toxic": "0"
|
425 |
+
},
|
426 |
+
{
|
427 |
+
"sentences": "Quà tặng là bộ vệ sinh đồng hồ, dùng rất tiện",
|
428 |
+
"toxic": "0"
|
429 |
+
},
|
430 |
+
{
|
431 |
+
"sentences": "Mua đồng hồ trên 5 triệu được tặng thêm 1 năm bảo hành",
|
432 |
+
"toxic": "0"
|
433 |
+
},
|
434 |
+
{
|
435 |
+
"sentences": "Tặng kèm bảo hiểm rơi vỡ trong 6 tháng, yên tâm hẳn",
|
436 |
+
"toxic": "0"
|
437 |
+
},
|
438 |
+
{
|
439 |
+
"sentences": "Nhận được voucher 300k cho lần mua tiếp theo",
|
440 |
+
"toxic": "0"
|
441 |
+
},
|
442 |
+
{
|
443 |
+
"sentences": "Tặng thêm 2 dây đeo màu khác nhau, tha hồ phối đồ",
|
444 |
+
"toxic": "0"
|
445 |
+
},
|
446 |
+
{
|
447 |
+
"sentences": "Quà sinh nhật là phiếu giảm giá 15%, mừng quá!",
|
448 |
+
"toxic": "0"
|
449 |
+
},
|
450 |
+
{
|
451 |
+
"sentences": "Được tặng kèm sổ tay hướng dẫn sử dụng chi tiết",
|
452 |
+
"toxic": "0"
|
453 |
+
},
|
454 |
+
{
|
455 |
+
"sentences": "Mua hàng trúng thẻ cào 100k, may mắn quá!",
|
456 |
+
"toxic": "0"
|
457 |
+
},
|
458 |
+
{
|
459 |
+
"sentences": "Tặng miễn phí khắc tên lên đồng hồ, độc quyền luôn",
|
460 |
+
"toxic": "0"
|
461 |
+
},
|
462 |
+
|
463 |
+
{
|
464 |
+
"sentences": "Sale Black Friday, đồng hồ Thụy Sĩ giảm sốc 50%",
|
465 |
+
"toxic": "0"
|
466 |
+
},
|
467 |
+
{
|
468 |
+
"sentences": "Dịp Tết được tặng thêm lì xì may mắn trị giá 200k",
|
469 |
+
"toxic": "0"
|
470 |
+
},
|
471 |
+
{
|
472 |
+
"sentences": "Khuyến mãi 20/10, mua 1 tặng 1 cho chị em phụ nữ",
|
473 |
+
"toxic": "0"
|
474 |
+
},
|
475 |
+
{
|
476 |
+
"sentences": "Giảm giá 30% toàn bộ sản phẩm nhân ngày thành lập shop",
|
477 |
+
"toxic": "0"
|
478 |
+
},
|
479 |
+
{
|
480 |
+
"sentences": "Mua đồng hồ đôi được giảm thêm 15% dịp Valentine",
|
481 |
+
"toxic": "0"
|
482 |
+
},
|
483 |
+
{
|
484 |
+
"sentences": "Ưu đãi back to school, sinh viên được giảm thêm 10%",
|
485 |
+
"toxic": "0"
|
486 |
+
},
|
487 |
+
{
|
488 |
+
"sentences": "Sale cuối năm, xả kho giá rẻ bất ngờ",
|
489 |
+
"toxic": "0"
|
490 |
+
},
|
491 |
+
{
|
492 |
+
"sentences": "Tri ân khách hàng, tặng voucher 500k cho đơn từ 3 triệu",
|
493 |
+
"toxic": "0"
|
494 |
+
},
|
495 |
+
{
|
496 |
+
"sentences": "Ngày Singles’ Day 11/11, giảm giá đến 60%",
|
497 |
+
"toxic": "0"
|
498 |
+
},
|
499 |
+
{
|
500 |
+
"sentences": "Mừng khai trương, free ship cho mọi đơn hàng",
|
501 |
+
"toxic": "0"
|
502 |
+
},
|
503 |
+
{
|
504 |
+
"sentences": "Đăng ký nhận thông báo sale sớm để không bỏ lỡ deal hot",
|
505 |
+
"toxic": "0"
|
506 |
+
},
|
507 |
+
{
|
508 |
+
"sentences": "Mua vào giờ vàng được giảm thêm 10% nữa đấy!",
|
509 |
+
"toxic": "0"
|
510 |
+
},
|
511 |
+
{
|
512 |
+
"sentences": "Kết hợp mã giảm giá và tích điểm để tiết kiệm tối đa",
|
513 |
+
"toxic": "0"
|
514 |
+
},
|
515 |
+
{
|
516 |
+
"sentences": "Theo dõi fanpage shop để nhận mã giảm giá hàng tuần",
|
517 |
+
"toxic": "0"
|
518 |
+
},
|
519 |
+
{
|
520 |
+
"sentences": "Mua hàng trả góp 0% qua thẻ tín dụng, nhẹ ví hẳn",
|
521 |
+
"toxic": "0"
|
522 |
+
},
|
523 |
+
{
|
524 |
+
"sentences": "Tích 5 điểm được giảm 1 triệu, mình đã đổi thành công",
|
525 |
+
"toxic": "0"
|
526 |
+
},
|
527 |
+
{
|
528 |
+
"sentences": "Thành viên VIP được ưu tiên giữ hàng trước khi sale",
|
529 |
+
"toxic": "0"
|
530 |
+
},
|
531 |
+
{
|
532 |
+
"sentences": "Mua hàng tích điểm đổi quà, năm nay đổi được balo xịn",
|
533 |
+
"toxic": "0"
|
534 |
+
},
|
535 |
+
{
|
536 |
+
"sentences": "Chương trình Vip member giảm thêm 10% mọi đơn hàng",
|
537 |
+
"toxic": "0"
|
538 |
+
},
|
539 |
+
{
|
540 |
+
"sentences": "Được tặng điểm thưởng gấp đôi vào ngày sinh nhật",
|
541 |
+
"toxic": "0"
|
542 |
+
},
|
543 |
+
{
|
544 |
+
"sentences": "Tích luỹ 10 triệu được nâng cấp lên thẻ Platinum",
|
545 |
+
"toxic": "0"
|
546 |
+
},
|
547 |
+
{
|
548 |
+
"sentences": "Ưu đãi đặc biệt cho khách hàng thân thiết mỗi tháng",
|
549 |
+
"toxic": "0"
|
550 |
+
},
|
551 |
+
{
|
552 |
+
"sentences": "Nhận được email ưu đãi riêng vì là khách quen",
|
553 |
+
"toxic": "0"
|
554 |
+
},
|
555 |
+
{
|
556 |
+
"sentences": "Điểm tích lũy không bị mất sau 1 năm như nhiều shop khác",
|
557 |
+
"toxic": "0"
|
558 |
+
},
|
559 |
+
{
|
560 |
+
"sentences": "Mỗi lần mua hàng đều được cộng thêm điểm vào tài khoản",
|
561 |
+
"toxic": "0"
|
562 |
+
}
|
563 |
+
|
564 |
+
]
|
requirements.txt
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
numpy==1.23.5
|
2 |
+
pandas==1.5.3
|
3 |
+
torch==2.7.0
|
4 |
+
transformers==4.52.4
|
5 |
+
keras==2.15.0
|
6 |
+
# vncorenlp==1.0.3
|
7 |
+
scikit-learn==1.6.1
|
8 |
+
Flask==3.1.1
|
9 |
+
gdown==5.1.0
|
10 |
+
tensorflow-cpu==2.15.0
|
11 |
+
underthesea==6.6.0
|
toxic_dataset.json
ADDED
@@ -0,0 +1,666 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"sentences": "đồng hồ gì mà nhìn như đồ chợ, quá thất vọng",
|
4 |
+
"toxic": "1"
|
5 |
+
},
|
6 |
+
{
|
7 |
+
"sentences": "mua cái đồng hồ này phí tiền thật sự",
|
8 |
+
"toxic": "1"
|
9 |
+
},
|
10 |
+
{
|
11 |
+
"sentences": "viết blog mà như spam, chẳng có tí thông tin hữu ích nào",
|
12 |
+
"toxic": "1"
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"sentences": "web lag kinh khủng, bấm hoài không ra sản phẩm",
|
16 |
+
"toxic": "1"
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"sentences": "giao hàng chậm như rùa, không hiểu làm ăn kiểu gì",
|
20 |
+
"toxic": "1"
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"sentences": "tư vấn kiểu qua loa, hỏi gì cũng không biết",
|
24 |
+
"toxic": "1"
|
25 |
+
},
|
26 |
+
{
|
27 |
+
"sentences": "đồng hồ nhìn ngoài khác xa hình, như bị lừa",
|
28 |
+
"toxic": "1"
|
29 |
+
},
|
30 |
+
{
|
31 |
+
"sentences": "đồng hồ fake mà dám bán giá thật, quá tệ",
|
32 |
+
"toxic": "1"
|
33 |
+
},
|
34 |
+
{
|
35 |
+
"sentences": "blog viết như học sinh lớp 1, lỗi chính tả đầy ra",
|
36 |
+
"toxic": "1"
|
37 |
+
},
|
38 |
+
{
|
39 |
+
"sentences": "shop này bán đồ như lừa đảo vậy, mua xong im re",
|
40 |
+
"toxic": "1"
|
41 |
+
},
|
42 |
+
{
|
43 |
+
"sentences": "dịch vụ tệ chưa từng thấy, gọi không nghe, nhắn không trả lời",
|
44 |
+
"toxic": "1"
|
45 |
+
},
|
46 |
+
{
|
47 |
+
"sentences": "bài viết lan man nhảm nhí, đọc mất thời gian",
|
48 |
+
"toxic": "1"
|
49 |
+
},
|
50 |
+
{
|
51 |
+
"sentences": "khách hàng bị đối xử như rác, quá chán",
|
52 |
+
"toxic": "1"
|
53 |
+
},
|
54 |
+
{
|
55 |
+
"sentences": "đồng hồ kiểu gì mới đeo 1 tuần đã tróc sơn",
|
56 |
+
"toxic": "1"
|
57 |
+
},
|
58 |
+
{
|
59 |
+
"sentences": "nhìn hình thì sang, nhận về như đồ chơi trẻ con",
|
60 |
+
"toxic": "1"
|
61 |
+
},
|
62 |
+
{
|
63 |
+
"sentences": "mua hàng kiểu này chỉ muốn chửi",
|
64 |
+
"toxic": "1"
|
65 |
+
},
|
66 |
+
{
|
67 |
+
"sentences": "blog toàn chém gió, thông tin sai lệch",
|
68 |
+
"toxic": "1"
|
69 |
+
},
|
70 |
+
{
|
71 |
+
"sentences": "đừng có tin vào mấy cái review ảo này",
|
72 |
+
"toxic": "1"
|
73 |
+
},
|
74 |
+
{
|
75 |
+
"sentences": "hàng lỗi mà không chịu đổi, quá coi thường khách",
|
76 |
+
"toxic": "1"
|
77 |
+
},
|
78 |
+
{
|
79 |
+
"sentences": "xem xong blog chỉ muốn tắt tab, tệ thật sự",
|
80 |
+
"toxic": "1"
|
81 |
+
},
|
82 |
+
{
|
83 |
+
"sentences": "shop bán hàng như cặc, tư vấn ngu như bò",
|
84 |
+
"toxic": "1"
|
85 |
+
},
|
86 |
+
{
|
87 |
+
"sentences": "địt mẹ cái đồng hồ, chưa gì đã hỏng",
|
88 |
+
"toxic": "1"
|
89 |
+
},
|
90 |
+
{
|
91 |
+
"sentences": "viết blog như cứt, đọc mà tức vãi lồn",
|
92 |
+
"toxic": "1"
|
93 |
+
},
|
94 |
+
{
|
95 |
+
"sentences": "giao hàng kiểu lồn gì vậy, 10 ngày chưa tới",
|
96 |
+
"toxic": "1"
|
97 |
+
},
|
98 |
+
{
|
99 |
+
"sentences": "mẹ nó chứ, mất tiền ngu mua cái đồng hồ lởm",
|
100 |
+
"toxic": "1"
|
101 |
+
},
|
102 |
+
{
|
103 |
+
"sentences": "sản phẩm như lồn, dịch vụ còn như chó",
|
104 |
+
"toxic": "1"
|
105 |
+
},
|
106 |
+
{
|
107 |
+
"sentences": "bọn này lừa đảo, mua 1 lần không bao giờ quay lại",
|
108 |
+
"toxic": "1"
|
109 |
+
},
|
110 |
+
{
|
111 |
+
"sentences": "cút mẹ đi, tư vấn kiểu này thì bán cho ai",
|
112 |
+
"toxic": "1"
|
113 |
+
},
|
114 |
+
{
|
115 |
+
"sentences": "chửi tụi mày là còn nhẹ, làm ăn như cc",
|
116 |
+
"toxic": "1"
|
117 |
+
},
|
118 |
+
{
|
119 |
+
"sentences": "mua cái đồng hồ như cái đồ chơi rẻ tiền, bực mình vãi",
|
120 |
+
"toxic": "1"
|
121 |
+
},
|
122 |
+
{
|
123 |
+
"sentences": "đồng hồ rẻ mạt như đồ nhựa, xứng đáng 1 sao",
|
124 |
+
"toxic": "1"
|
125 |
+
},
|
126 |
+
{
|
127 |
+
"sentences": "shop toàn lừa đảo, đổi trả khó hơn lên trời",
|
128 |
+
"toxic": "1"
|
129 |
+
},
|
130 |
+
{
|
131 |
+
"sentences": "não chó à? Giao hàng sai mà còn cãi",
|
132 |
+
"toxic": "1"
|
133 |
+
},
|
134 |
+
{
|
135 |
+
"sentences": "web như cứt, load 10 phút không xong",
|
136 |
+
"toxic": "1"
|
137 |
+
},
|
138 |
+
{
|
139 |
+
"sentences": "nhân viên vô học, trả lời như đang khinh khách",
|
140 |
+
"toxic": "1"
|
141 |
+
},
|
142 |
+
{
|
143 |
+
"sentences": "đồng hồ đeo 2 ngày chết pin, hàng lậu chắc?",
|
144 |
+
"toxic": "1"
|
145 |
+
},
|
146 |
+
{
|
147 |
+
"sentences": "mua xong mới biết bị lừa, đúng là lũ rác rưởi",
|
148 |
+
"toxic": "1"
|
149 |
+
},
|
150 |
+
{
|
151 |
+
"sentences": "chính sách đổi trả như cái quần què",
|
152 |
+
"toxic": "1"
|
153 |
+
},
|
154 |
+
{
|
155 |
+
"sentences": "tưởng uy tín ai ngờ toàn review mua",
|
156 |
+
"toxic": "1"
|
157 |
+
},
|
158 |
+
{
|
159 |
+
"sentences": "khuyến mãi lừa đảo, tính giá cắt cổ",
|
160 |
+
"toxic": "1"
|
161 |
+
},
|
162 |
+
{
|
163 |
+
"sentences": "đm cái thằng tư vấn, nói dối trắng trợn",
|
164 |
+
"toxic": "1"
|
165 |
+
},
|
166 |
+
{
|
167 |
+
"sentences": "hàng Trung Quốc dán mác Thụy Sĩ, đồ đểu!",
|
168 |
+
"toxic": "1"
|
169 |
+
},
|
170 |
+
{
|
171 |
+
"sentences": "bịp bợm từ A-Z, tố cáo cho chết shop",
|
172 |
+
"toxic": "1"
|
173 |
+
},
|
174 |
+
{
|
175 |
+
"sentences": "không biết xấu hổ là gì à? Bán đồ rác!",
|
176 |
+
"toxic": "1"
|
177 |
+
},
|
178 |
+
{
|
179 |
+
"sentences": "đóng gói cẩu thả, nhận hàng như đồ bỏ",
|
180 |
+
"toxic": "1"
|
181 |
+
},
|
182 |
+
{
|
183 |
+
"sentences": "tiền mất tật mang, đúng là lũ lừa đảo",
|
184 |
+
"toxic": "1"
|
185 |
+
},
|
186 |
+
{
|
187 |
+
"sentences": "chụp hình thì đẹp, hàng thực tế như ve chai",
|
188 |
+
"toxic": "1"
|
189 |
+
},
|
190 |
+
{
|
191 |
+
"sentences": "thà đốt tiền còn hơn mua đồ ở đây",
|
192 |
+
"toxic": "1"
|
193 |
+
},
|
194 |
+
{
|
195 |
+
"sentences": "không biết ngu hay cố tình lừa khách",
|
196 |
+
"toxic": "1"
|
197 |
+
},
|
198 |
+
{
|
199 |
+
"sentences": "cảm ơn shop đã cho tôi bài học đắt giá",
|
200 |
+
"toxic": "1"
|
201 |
+
},
|
202 |
+
{
|
203 |
+
"sentences": "đồng hồ chạy sai số, bảo hành như đùa",
|
204 |
+
"toxic": "1"
|
205 |
+
},
|
206 |
+
{
|
207 |
+
"sentences": "shop toàn thớt, khách sập bẫy xong block luôn",
|
208 |
+
"toxic": "1"
|
209 |
+
},
|
210 |
+
{
|
211 |
+
"sentences": "đm đồ rởm, tiền triệu mà như đồng hồ trẻ em",
|
212 |
+
"toxic": "1"
|
213 |
+
},
|
214 |
+
{
|
215 |
+
"sentences": "không biết xấu hổ khi bán đồ kém chất lượng",
|
216 |
+
"toxic": "1"
|
217 |
+
},
|
218 |
+
{
|
219 |
+
"sentences": "từng chữ trong blog toàn là nói dối",
|
220 |
+
"toxic": "1"
|
221 |
+
},
|
222 |
+
{
|
223 |
+
"sentences": "óc chó à? Bán đồ fake mà đòi giá chính hãng",
|
224 |
+
"toxic": "1"
|
225 |
+
},
|
226 |
+
{
|
227 |
+
"sentences": "shop này toàn lũ ăn cắp tiền thiên hạ",
|
228 |
+
"toxic": "1"
|
229 |
+
},
|
230 |
+
{
|
231 |
+
"sentences": "đm đồ rác rưởi, vứt đi còn thấy phí chỗ",
|
232 |
+
"toxic": "1"
|
233 |
+
},
|
234 |
+
{
|
235 |
+
"sentences": "nhân viên tư vấn ngu như con lợn",
|
236 |
+
"toxic": "1"
|
237 |
+
},
|
238 |
+
{
|
239 |
+
"sentences": "mua hàng xong mới biết não mình có vấn đề",
|
240 |
+
"toxic": "1"
|
241 |
+
},
|
242 |
+
{
|
243 |
+
"sentences": "web như shit, vừa vào đã muốn nổ máy tính",
|
244 |
+
"toxic": "1"
|
245 |
+
},
|
246 |
+
{
|
247 |
+
"sentences": "địt mẹ thằng CEO, đào tạo nhân viên như cứt",
|
248 |
+
"toxic": "1"
|
249 |
+
},
|
250 |
+
{
|
251 |
+
"sentences": "hàng nhái mà bày đặt sang chảnh",
|
252 |
+
"toxic": "1"
|
253 |
+
},
|
254 |
+
{
|
255 |
+
"sentences": "cái blog viết như cái thùng rác di động",
|
256 |
+
"toxic": "1"
|
257 |
+
},
|
258 |
+
{
|
259 |
+
"sentences": "không biết shop này sống bằng nghề lừa đảo à?",
|
260 |
+
"toxic": "1"
|
261 |
+
},
|
262 |
+
{
|
263 |
+
"sentences": "đm mất 3 triệu mua cục sắt vụn",
|
264 |
+
"toxic": "1"
|
265 |
+
},
|
266 |
+
{
|
267 |
+
"sentences": "bọn mày không xứng đáng làm kinh doanh",
|
268 |
+
"toxic": "1"
|
269 |
+
},
|
270 |
+
{
|
271 |
+
"sentences": "gọi điện chửi cho sấp mặt mới hả dạ",
|
272 |
+
"toxic": "1"
|
273 |
+
},
|
274 |
+
{
|
275 |
+
"sentences": "shop toàn lũ rác rưởi xã hội",
|
276 |
+
"toxic": "1"
|
277 |
+
},
|
278 |
+
{
|
279 |
+
"sentences": "tưởng mua đồ hiệu ai ngờ mua phải đồ thải",
|
280 |
+
"toxic": "1"
|
281 |
+
},
|
282 |
+
{
|
283 |
+
"sentences": "đm cái thứ đồng hồ chó đeo",
|
284 |
+
"toxic": "1"
|
285 |
+
},
|
286 |
+
{
|
287 |
+
"sentences": "chế độ bảo hành như trò đùa của thằng điên",
|
288 |
+
"toxic": "1"
|
289 |
+
},
|
290 |
+
{
|
291 |
+
"sentences": "mua hàng xong muốn đập nát vào mặt shop",
|
292 |
+
"toxic": "1"
|
293 |
+
},
|
294 |
+
{
|
295 |
+
"sentences": "lần đầu tiên thấy shop tồi như lồn thế này",
|
296 |
+
"toxic": "1"
|
297 |
+
},
|
298 |
+
{
|
299 |
+
"sentences": "địt mẹ thằng nào viết cái blog vô dụng này",
|
300 |
+
"toxic": "1"
|
301 |
+
},
|
302 |
+
{
|
303 |
+
"sentences": "shop này nên đổi tên thành 'Lừa Đảo Chuyên Nghiệp'",
|
304 |
+
"toxic": "1"
|
305 |
+
},
|
306 |
+
{
|
307 |
+
"sentences": "sản phẩm như đồng nát mà dám tính tiền triệu",
|
308 |
+
"toxic": "1"
|
309 |
+
},
|
310 |
+
{
|
311 |
+
"sentences": "không có tiền thì đừng mở shop làm gì cho nhục",
|
312 |
+
"toxic": "1"
|
313 |
+
},
|
314 |
+
{
|
315 |
+
"sentences": "tôi sẽ đảm bảo không ai dại dột mua ở đây nữa",
|
316 |
+
"toxic": "1"
|
317 |
+
},
|
318 |
+
{
|
319 |
+
"sentences": "thất vọng không thể nào thất vọng hơn",
|
320 |
+
"toxic": "1"
|
321 |
+
},
|
322 |
+
{
|
323 |
+
"sentences": "đúng là lũ ăn tiền bằng mồ hôi nước mắt người khác",
|
324 |
+
"toxic": "1"
|
325 |
+
},
|
326 |
+
{
|
327 |
+
"sentences": "shop này xứng đáng bị sập tiệm trong êm đẹp",
|
328 |
+
"toxic": "1"
|
329 |
+
},
|
330 |
+
{
|
331 |
+
"sentences": "mua hàng xong chỉ muốn chửi thề cả ngày",
|
332 |
+
"toxic": "1"
|
333 |
+
},
|
334 |
+
{
|
335 |
+
"sentences": "đm cái kiểu làm ăn bẩn thỉu này",
|
336 |
+
"toxic": "1"
|
337 |
+
},
|
338 |
+
{
|
339 |
+
"sentences": "tôi sẽ đăng bài này khắp nơi để cảnh báo mọi người",
|
340 |
+
"toxic": "1"
|
341 |
+
},
|
342 |
+
{
|
343 |
+
"sentences": "shop này là minh chứng cho sự suy đồi đạo đức kinh doanh",
|
344 |
+
"toxic": "1"
|
345 |
+
},
|
346 |
+
{
|
347 |
+
"sentences": "bài review như cứt chó, viết mà chẳng hiểu gì về sản phẩm",
|
348 |
+
"toxic": "1"
|
349 |
+
},
|
350 |
+
{
|
351 |
+
"sentences": "nội dung bài viết dở ẹc, đọc xong còn tức hơn là mua phải hàng giả",
|
352 |
+
"toxic": "1"
|
353 |
+
},
|
354 |
+
{
|
355 |
+
"sentences": "so sánh sản phẩm kiểu gì mà ngu học vậy? Khác hoàn toàn thực tế!",
|
356 |
+
"toxic": "1"
|
357 |
+
},
|
358 |
+
{
|
359 |
+
"sentences": "đm bài viết toàn nói tốt cho sản phẩm rác, chắc được shop trả tiền",
|
360 |
+
"toxic": "1"
|
361 |
+
},
|
362 |
+
{
|
363 |
+
"sentences": "review như lồn, đúng kiểu chưa dùng đã phán",
|
364 |
+
"toxic": "1"
|
365 |
+
},
|
366 |
+
{
|
367 |
+
"sentences": "tác giả chắc bị mù hay sao mà khen cái đồng hồ nhựa dẻo này",
|
368 |
+
"toxic": "1"
|
369 |
+
},
|
370 |
+
{
|
371 |
+
"sentences": "bài phân tích sản phẩm viết bằng chân à? Toàn thông tin sai lệch",
|
372 |
+
"toxic": "1"
|
373 |
+
},
|
374 |
+
{
|
375 |
+
"sentences": "so sánh hàng real vs fake mà như đấm vào mặt người đọc",
|
376 |
+
"toxic": "1"
|
377 |
+
},
|
378 |
+
{
|
379 |
+
"sentences": "nội dung copy paste khắp nơi, đạo văn còn không biết xấu hổ",
|
380 |
+
"toxic": "1"
|
381 |
+
},
|
382 |
+
{
|
383 |
+
"sentences": "review 5 sao nhưng toàn nói xấu, đéo hiểu kiểu gì",
|
384 |
+
"toxic": "1"
|
385 |
+
},
|
386 |
+
{
|
387 |
+
"sentences": "viết bài kiểu này thì tốt nhất câm mồm lại",
|
388 |
+
"toxic": "1"
|
389 |
+
},
|
390 |
+
{
|
391 |
+
"sentences": "tưởng có thông tin hữu ích ai ngờ đọc xong chỉ thấy ngu người",
|
392 |
+
"toxic": "1"
|
393 |
+
},
|
394 |
+
{
|
395 |
+
"sentences": "bài viết đánh giá mà như quảng cáo rẻ tiền",
|
396 |
+
"toxic": "1"
|
397 |
+
},
|
398 |
+
{
|
399 |
+
"sentences": "so sánh kiểu đầu buồi, hàng A với hàng B đéo liên quan",
|
400 |
+
"toxic": "1"
|
401 |
+
},
|
402 |
+
{
|
403 |
+
"sentences": "tác giả viết bài chắc uống rượu xong viết à? Toàn sai sự thật",
|
404 |
+
"toxic": "1"
|
405 |
+
},
|
406 |
+
{
|
407 |
+
"sentences": "đm đọc bài xong mua hàng mới biết bị lừa như chó",
|
408 |
+
"toxic": "1"
|
409 |
+
},
|
410 |
+
{
|
411 |
+
"sentences": "nội dung nhảm nhí, hình ảnh thì photoshop trắng trợn",
|
412 |
+
"toxic": "1"
|
413 |
+
},
|
414 |
+
{
|
415 |
+
"sentences": "review không trung thực, tôi sẽ kiện vì thông tin sai lệch",
|
416 |
+
"toxic": "1"
|
417 |
+
},
|
418 |
+
{
|
419 |
+
"sentences": "bài viết chất lượng như rác, tác giả nên đi học lại lớp 1",
|
420 |
+
"toxic": "1"
|
421 |
+
},
|
422 |
+
{
|
423 |
+
"sentences": "so sánh khập khiễng, đúng kiểu nói cho có nói",
|
424 |
+
"toxic": "1"
|
425 |
+
},
|
426 |
+
{
|
427 |
+
"sentences": "đánh giá sản phẩm kiểu này thì thà đốt tiền còn hơn",
|
428 |
+
"toxic": "1"
|
429 |
+
},
|
430 |
+
{
|
431 |
+
"sentences": "tác giả có não không? Khen sản phẩm kém chất lượng thế này",
|
432 |
+
"toxic": "1"
|
433 |
+
},
|
434 |
+
{
|
435 |
+
"sentences": "nội dung bài viết là trò cười cho cả cộng đồng",
|
436 |
+
"toxic": "1"
|
437 |
+
},
|
438 |
+
{
|
439 |
+
"sentences": "review như con cặc, chụp hình hàng real nhưng giao hàng fake",
|
440 |
+
"toxic": "1"
|
441 |
+
},
|
442 |
+
{
|
443 |
+
"sentences": "bài viết này xứng đáng bị report vì lừa đảo độc giả",
|
444 |
+
"toxic": "1"
|
445 |
+
},
|
446 |
+
{
|
447 |
+
"sentences": "so sánh đểu cáng, cố tình hạ thấp đối thủ",
|
448 |
+
"toxic": "1"
|
449 |
+
},
|
450 |
+
{
|
451 |
+
"sentences": "đọc xong bài viết muốn ném điện thoại vì tức",
|
452 |
+
"toxic": "1"
|
453 |
+
},
|
454 |
+
{
|
455 |
+
"sentences": "tác giả chắc bị shop mua chuộc nên mới viết tốt cho đồ rác",
|
456 |
+
"toxic": "1"
|
457 |
+
},
|
458 |
+
{
|
459 |
+
"sentences": "nội dung dối trá, hình ảnh lừa đảo, đúng kiểu review ảo",
|
460 |
+
"toxic": "1"
|
461 |
+
},
|
462 |
+
{
|
463 |
+
"sentences": "review không đúng trọng tâm, toàn nói nhảm về thứ không liên quan",
|
464 |
+
"toxic": "1"
|
465 |
+
},
|
466 |
+
{
|
467 |
+
"sentences": "chó mới tin mấy bài review dỏm này, toàn tiền PR bẩn",
|
468 |
+
"toxic": "1"
|
469 |
+
},
|
470 |
+
{
|
471 |
+
"sentences": "nội dung viết như cái quần què, đọc xong óc chó còn thông minh hơn",
|
472 |
+
"toxic": "1"
|
473 |
+
},
|
474 |
+
{
|
475 |
+
"sentences": "so sánh cc gì mà đem đồng hồ Thụy Sĩ ra đặt cạnh đồ Trung Quốc",
|
476 |
+
"toxic": "1"
|
477 |
+
},
|
478 |
+
{
|
479 |
+
"sentences": "tác giả não phẳng à? Điểm yếu sản phẩm toàn viết nhẹ như veo",
|
480 |
+
"toxic": "1"
|
481 |
+
},
|
482 |
+
{
|
483 |
+
"sentences": "bài viết chất lượng như rác thải, admin nên đốt blog đi là vừa",
|
484 |
+
"toxic": "1"
|
485 |
+
},
|
486 |
+
{
|
487 |
+
"sentences": "review kiểu đầu buồi, chụp hình đẹp nhưng thực tế hàng như cứt",
|
488 |
+
"toxic": "1"
|
489 |
+
},
|
490 |
+
{
|
491 |
+
"sentences": "đm cả bài dài toàn nước, không có tí giá trị thực tế",
|
492 |
+
"toxic": "1"
|
493 |
+
},
|
494 |
+
{
|
495 |
+
"sentences": "so sánh khập khiễng như đít với đầu, đéo liên quan gì nhau",
|
496 |
+
"toxic": "1"
|
497 |
+
},
|
498 |
+
{
|
499 |
+
"sentences": "tưởng đọc được cái gì hay hoá ra bài PR trá hình",
|
500 |
+
"toxic": "1"
|
501 |
+
},
|
502 |
+
{
|
503 |
+
"sentences": "viết lách lủng củng như óc lợn, đọc xong phí cả đời",
|
504 |
+
"toxic": "1"
|
505 |
+
},
|
506 |
+
{
|
507 |
+
"sentences": "shop này review ảo thế mà không ai kiểm duyệt à?",
|
508 |
+
"toxic": "1"
|
509 |
+
},
|
510 |
+
{
|
511 |
+
"sentences": "nội dung nhạt như nước ốc, xem xong muốn đấm vào mồm tác giả",
|
512 |
+
"toxic": "1"
|
513 |
+
},
|
514 |
+
{
|
515 |
+
"sentences": "so sánh kiểu gì mà đem Rolex so với đồng hồ trẻ em?",
|
516 |
+
"toxic": "1"
|
517 |
+
},
|
518 |
+
{
|
519 |
+
"sentences": "bài viết này xứng đáng 0 sao, tác giả nên đi học lại cấp 1",
|
520 |
+
"toxic": "1"
|
521 |
+
},
|
522 |
+
{
|
523 |
+
"sentences": "review như lồn, chê 1 câu rồi khen 10 câu kiểu gì?",
|
524 |
+
"toxic": "1"
|
525 |
+
},
|
526 |
+
{
|
527 |
+
"sentences": "nội dung copy khắp nơi, đạo văn còn không biết ngượng",
|
528 |
+
"toxic": "1"
|
529 |
+
},
|
530 |
+
{
|
531 |
+
"sentences": "đm đọc xong bài viết này muốn ném điện thoại qua cửa sổ",
|
532 |
+
"toxic": "1"
|
533 |
+
},
|
534 |
+
{
|
535 |
+
"sentences": "so sánh đểu, cố tình nâng bi sản phẩm chủ shop",
|
536 |
+
"toxic": "1"
|
537 |
+
},
|
538 |
+
{
|
539 |
+
"sentences": "tác giả chắc bị shop nó dúi tiền nên mới viết tốt thế",
|
540 |
+
"toxic": "1"
|
541 |
+
},
|
542 |
+
{
|
543 |
+
"sentences": "bài viết rác rưởi, hình minh hoạ toàn photoshop lòi ra",
|
544 |
+
"toxic": "1"
|
545 |
+
},
|
546 |
+
{
|
547 |
+
"sentences": "review không công tâm, đúng kiểu ăn tiền viết láo",
|
548 |
+
"toxic": "1"
|
549 |
+
},
|
550 |
+
{
|
551 |
+
"sentences": "nội dung lê thê như đít trâu, đọc 10 phút không hiểu gì",
|
552 |
+
"toxic": "1"
|
553 |
+
},
|
554 |
+
{
|
555 |
+
"sentences": "so sánh ngu học, đem iPhone so với Nokia cục gạch",
|
556 |
+
"toxic": "1"
|
557 |
+
},
|
558 |
+
{
|
559 |
+
"sentences": "tác giả viết bài bằng mông à? Toàn thông tin vớ vẩn",
|
560 |
+
"toxic": "1"
|
561 |
+
},
|
562 |
+
{
|
563 |
+
"sentences": "đm đọc xong muốn xin lỗi bộ não vì phải tiếp nhận rác này",
|
564 |
+
"toxic": "1"
|
565 |
+
},
|
566 |
+
{
|
567 |
+
"sentences": "review kiểu bố láo, chê 1 tí rồi khen như thánh",
|
568 |
+
"toxic": "1"
|
569 |
+
},
|
570 |
+
{
|
571 |
+
"sentences": "nội dung như cái thùng rác, tác giả nên đi chữa não",
|
572 |
+
"toxic": "1"
|
573 |
+
},
|
574 |
+
{
|
575 |
+
"sentences": "so sánh lố bịch, đem xe đạp so với xe hơi Mercedes",
|
576 |
+
"toxic": "1"
|
577 |
+
},
|
578 |
+
{
|
579 |
+
"sentences": "bài viết này là minh chứng cho sự xuống cấp của báo chí",
|
580 |
+
"toxic": "1"
|
581 |
+
},
|
582 |
+
{
|
583 |
+
"sentences": "review fake như chó, chắc viết mà chưa dùng sản phẩm",
|
584 |
+
"toxic": "1"
|
585 |
+
},
|
586 |
+
{
|
587 |
+
"sentences": "Khuyến mãi gì mà toàn hàng lỗi, đừng có lừa người tiêu dùng",
|
588 |
+
"toxic": "1"
|
589 |
+
},
|
590 |
+
{
|
591 |
+
"sentences": "Sale rồi mà giá vẫn đắt hơn chợ, bốc phét vừa thôi",
|
592 |
+
"toxic": "1"
|
593 |
+
},
|
594 |
+
{
|
595 |
+
"sentences": "Quảng cáo giảm giá 50% xong vào thì chỉ có 10%, đúng kiểu lừa đảo",
|
596 |
+
"toxic": "1"
|
597 |
+
},
|
598 |
+
{
|
599 |
+
"sentences": "Đồng hồ sale toàn hàng tồn kho cũ mèm, nhìn là biết",
|
600 |
+
"toxic": "1"
|
601 |
+
},
|
602 |
+
{
|
603 |
+
"sentences": "Nhân viên tư vấn như robot, hỏi cái gì cũng không biết",
|
604 |
+
"toxic": "1"
|
605 |
+
},
|
606 |
+
{
|
607 |
+
"sentences": "Shop lừa đảo! Mua đồng hồ sale về được 2 ngày đã hỏng",
|
608 |
+
"toxic": "1"
|
609 |
+
},
|
610 |
+
{
|
611 |
+
"sentences": "Khuyến mãi kiểu gì mà tính tiền giá gốc? Đồ ăn cướp trắng trợn!",
|
612 |
+
"toxic": "1"
|
613 |
+
},
|
614 |
+
{
|
615 |
+
"sentences": "Nhân viên não tôm à? Đã không biết gì còn cãi ngược khách",
|
616 |
+
"toxic": "1"
|
617 |
+
},
|
618 |
+
{
|
619 |
+
"sentences": "Website như cc, treo máy khi thanh toán xong mất luôn đơn hàng",
|
620 |
+
"toxic": "1"
|
621 |
+
},
|
622 |
+
{
|
623 |
+
"sentences": "Bảo hành kiểu gì mà mang đến cửa hàng lại bị đuổi về?",
|
624 |
+
"toxic": "1"
|
625 |
+
},
|
626 |
+
{
|
627 |
+
"sentences": "Đm shop chó này, bán hàng dỏm mà dám nhận tiền người ta",
|
628 |
+
"toxic": "1"
|
629 |
+
},
|
630 |
+
{
|
631 |
+
"sentences": "Mày tưởng bố mày dễ bị lừa à? Tao sẽ kiện đến cùng cho shop sập tiệm",
|
632 |
+
"toxic": "1"
|
633 |
+
},
|
634 |
+
{
|
635 |
+
"sentences": "Lũ nhân viên như lợn, ăn nói vô văn hóa, đúng là đồ súc vật",
|
636 |
+
"toxic": "1"
|
637 |
+
},
|
638 |
+
{
|
639 |
+
"sentences": "Khuyến mãi cái lồn! Toàn trò bịp bợm để moi tiền thiên hạ",
|
640 |
+
"toxic": "1"
|
641 |
+
},
|
642 |
+
{
|
643 |
+
"sentences": "Tao sẽ đăng bài khắp MXH cho thiên hạ biết shop lừa đảo thế nào",
|
644 |
+
"toxic": "1"
|
645 |
+
},
|
646 |
+
{
|
647 |
+
"sentences": "Cái lồn má mày, sale hàng fake mà dám nhận là chính hãng",
|
648 |
+
"toxic": "1"
|
649 |
+
},
|
650 |
+
{
|
651 |
+
"sentences": "Địt mẹ cái shop chó đẻ, bán đồ như shit mà đòi tiền triệu",
|
652 |
+
"toxic": "1"
|
653 |
+
},
|
654 |
+
{
|
655 |
+
"sentences": "Tao sẽ đốt cửa hàng của mày nếu không trả tiền lại đây",
|
656 |
+
"toxic": "1"
|
657 |
+
},
|
658 |
+
{
|
659 |
+
"sentences": "Lũ nhân viên như con đĩ, chỉ biết cười nhạo khách hàng",
|
660 |
+
"toxic": "1"
|
661 |
+
},
|
662 |
+
{
|
663 |
+
"sentences": "Khuyến mãi cái buồi! Toàn trò lừa bịp của lũ khốn nạn",
|
664 |
+
"toxic": "1"
|
665 |
+
}
|
666 |
+
]
|