trandackhoa commited on
Commit
627e25a
·
verified ·
1 Parent(s): cdd8818

Upload 20 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ results/best_model/tokenizer.json filter=lfs diff=lfs merge=lfs -text
.idea/.gitignore ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
6
+ # Datasource local storage ignored files
7
+ /dataSources/
8
+ /dataSources.local.xml
.idea/NER model.iml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="PYTHON_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
5
+ <orderEntry type="inheritedJdk" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ </component>
8
+ </module>
.idea/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="PyInterpreterInspection" enabled="false" level="WARNING" enabled_by_default="false" />
5
+ </profile>
6
+ </component>
.idea/inspectionProfiles/profiles_settings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
.idea/misc.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Black">
4
+ <option name="sdkName" value="Python 3.12 (pythonProject)" />
5
+ </component>
6
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (pythonProject)" project-jdk-type="Python SDK" />
7
+ </project>
.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/NER model.iml" filepath="$PROJECT_DIR$/.idea/NER model.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
.idea/workspace.xml ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="AutoImportSettings">
4
+ <option name="autoReloadType" value="SELECTIVE" />
5
+ </component>
6
+ <component name="ChangeListManager">
7
+ <list default="true" id="ba5bc509-f0e6-4a07-9cbd-8e8659d00518" name="Changes" comment="" />
8
+ <option name="SHOW_DIALOG" value="false" />
9
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
10
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
11
+ <option name="LAST_RESOLUTION" value="IGNORE" />
12
+ </component>
13
+ <component name="FileTemplateManagerImpl">
14
+ <option name="RECENT_TEMPLATES">
15
+ <list>
16
+ <option value="Jupyter Notebook" />
17
+ </list>
18
+ </option>
19
+ </component>
20
+ <component name="ProjectColorInfo">{
21
+ &quot;associatedIndex&quot;: 5
22
+ }</component>
23
+ <component name="ProjectId" id="2nYOFALQDlBixQWP5CCnPiXQs2r" />
24
+ <component name="ProjectViewState">
25
+ <option name="hideEmptyMiddlePackages" value="true" />
26
+ <option name="showLibraryContents" value="true" />
27
+ </component>
28
+ <component name="PropertiesComponent">{
29
+ &quot;keyToString&quot;: {
30
+ &quot;Python.train.executor&quot;: &quot;Run&quot;,
31
+ &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
32
+ &quot;last_opened_file_path&quot;: &quot;/home/ebk/Desktop/NER model&quot;,
33
+ &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
34
+ &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
35
+ &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
36
+ &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
37
+ &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
38
+ &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
39
+ }
40
+ }</component>
41
+ <component name="RecentsManager">
42
+ <key name="CopyFile.RECENT_KEYS">
43
+ <recent name="$PROJECT_DIR$" />
44
+ </key>
45
+ </component>
46
+ <component name="RunManager">
47
+ <configuration name="train" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
48
+ <module name="NER model" />
49
+ <option name="ENV_FILES" value="" />
50
+ <option name="INTERPRETER_OPTIONS" value="" />
51
+ <option name="PARENT_ENVS" value="true" />
52
+ <envs>
53
+ <env name="PYTHONUNBUFFERED" value="1" />
54
+ </envs>
55
+ <option name="SDK_HOME" value="" />
56
+ <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
57
+ <option name="IS_MODULE_SDK" value="true" />
58
+ <option name="ADD_CONTENT_ROOTS" value="true" />
59
+ <option name="ADD_SOURCE_ROOTS" value="true" />
60
+ <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
61
+ <option name="SCRIPT_NAME" value="$PROJECT_DIR$/train.py" />
62
+ <option name="PARAMETERS" value="" />
63
+ <option name="SHOW_COMMAND_LINE" value="false" />
64
+ <option name="EMULATE_TERMINAL" value="false" />
65
+ <option name="MODULE_MODE" value="false" />
66
+ <option name="REDIRECT_INPUT" value="false" />
67
+ <option name="INPUT_FILE" value="" />
68
+ <method v="2" />
69
+ </configuration>
70
+ <recent_temporary>
71
+ <list>
72
+ <item itemvalue="Python.train" />
73
+ </list>
74
+ </recent_temporary>
75
+ </component>
76
+ <component name="SharedIndexes">
77
+ <attachedChunks>
78
+ <set>
79
+ <option value="bundled-js-predefined-d6986cc7102b-5c90d61e3bab-JavaScript-PY-242.23339.19" />
80
+ <option value="bundled-python-sdk-0029f7779945-399fe30bd8c1-com.jetbrains.pycharm.pro.sharedIndexes.bundled-PY-242.23339.19" />
81
+ </set>
82
+ </attachedChunks>
83
+ </component>
84
+ <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
85
+ <component name="TaskManager">
86
+ <task active="true" id="Default" summary="Default task">
87
+ <changelist id="ba5bc509-f0e6-4a07-9cbd-8e8659d00518" name="Changes" comment="" />
88
+ <created>1729146436708</created>
89
+ <option name="number" value="Default" />
90
+ <option name="presentableId" value="Default" />
91
+ <updated>1729146436708</updated>
92
+ <workItem from="1729146437750" duration="3465000" />
93
+ <workItem from="1729149910895" duration="15800000" />
94
+ </task>
95
+ <servers />
96
+ </component>
97
+ <component name="TypeScriptGeneratedFilesManager">
98
+ <option name="version" value="3" />
99
+ </component>
100
+ <component name="com.intellij.coverage.CoverageDataManagerImpl">
101
+ <SUITE FILE_PATH="coverage/NER_model$train.coverage" NAME="train Coverage Results" MODIFIED="1729146636264" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
102
+ </component>
103
+ </project>
ONNX_convert.ipynb ADDED
@@ -0,0 +1,217 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "metadata": {
5
+ "ExecuteTime": {
6
+ "end_time": "2024-10-18T02:56:55.438127Z",
7
+ "start_time": "2024-10-18T02:56:54.290456Z"
8
+ }
9
+ },
10
+ "cell_type": "code",
11
+ "source": [
12
+ "import torch\n",
13
+ "from transformers import AutoTokenizer, AutoModelForTokenClassification\n",
14
+ "import onnx\n",
15
+ "import onnxruntime\n",
16
+ "import numpy as np"
17
+ ],
18
+ "id": "2c8eccf897472c15",
19
+ "outputs": [
20
+ {
21
+ "name": "stderr",
22
+ "output_type": "stream",
23
+ "text": [
24
+ "/home/ebk/PycharmProjects/pythonProject/venv/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
25
+ " from .autonotebook import tqdm as notebook_tqdm\n"
26
+ ]
27
+ }
28
+ ],
29
+ "execution_count": 1
30
+ },
31
+ {
32
+ "cell_type": "code",
33
+ "id": "initial_id",
34
+ "metadata": {
35
+ "collapsed": true,
36
+ "ExecuteTime": {
37
+ "end_time": "2024-10-18T02:58:34.503582Z",
38
+ "start_time": "2024-10-18T02:58:32.670581Z"
39
+ }
40
+ },
41
+ "source": [
42
+ "# Load the ONNX model\n",
43
+ "ort_session = onnxruntime.InferenceSession(\"ner_model.onnx\")\n",
44
+ "\n",
45
+ "# Load the tokenizer\n",
46
+ "tokenizer = AutoTokenizer.from_pretrained(\"./results/best_model\")\n",
47
+ "\n",
48
+ "id2label = {0: \"O\", 1: \"B-SERVICE\", 2: \"I-SERVICE\", 3: \"B-LOCATION\", 4: \"I-LOCATION\"}\n",
49
+ "\n",
50
+ "# Define service mapping\n",
51
+ "service_mapping = {\n",
52
+ " \"hotel\": [\"hotel\", \"hotels\", \"khách sạn\", \"khach san\", \"ks\"],\n",
53
+ " \"flight\": [\"flight\", \"flights\", \"vé máy bay\", \"máy bay\", \"may bay\"],\n",
54
+ " \"car rental\": [\"car rental\", \"car rentals\", \"thuê xe\", \"xe\"],\n",
55
+ " \"ticket\": [\"ticket\", \"tickets\", \"vé\", \"vé tham quan\", \"ve\", \"ve tham quan\"],\n",
56
+ " \"tour\": [\"tour\", \"tours\", \"du lịch\", \"du lich\"]\n",
57
+ "}\n",
58
+ "\n",
59
+ "def map_service(service):\n",
60
+ " service = service.lower()\n",
61
+ " for key, values in service_mapping.items():\n",
62
+ " if any(v in service for v in values):\n",
63
+ " return key\n",
64
+ " return None\n",
65
+ "\n",
66
+ "def predict_onnx(text):\n",
67
+ " inputs = tokenizer(text, return_tensors=\"np\", truncation=True, padding=True)\n",
68
+ " \n",
69
+ " # Run inference\n",
70
+ " ort_inputs = {\n",
71
+ " \"input_ids\": inputs[\"input_ids\"],\n",
72
+ " \"attention_mask\": inputs[\"attention_mask\"]\n",
73
+ " }\n",
74
+ " ort_outputs = ort_session.run(None, ort_inputs)\n",
75
+ " predictions = np.argmax(ort_outputs[0], axis=2)\n",
76
+ " predicted_labels = [id2label[p] for p in predictions[0]]\n",
77
+ " word_ids = inputs.word_ids()\n",
78
+ " aligned_labels = []\n",
79
+ " current_word = None\n",
80
+ " for word_id, label in zip(word_ids, predicted_labels):\n",
81
+ " if word_id != current_word:\n",
82
+ " aligned_labels.append(label)\n",
83
+ " current_word = word_id\n",
84
+ " \n",
85
+ " # Extract entities\n",
86
+ " entities = {\"SERVICE\": [], \"LOCATION\": []}\n",
87
+ " current_entity = None\n",
88
+ " current_tokens = []\n",
89
+ " \n",
90
+ " words = text.split()\n",
91
+ " for word, label in zip(words, aligned_labels):\n",
92
+ " if label.startswith(\"B-\"):\n",
93
+ " if current_entity:\n",
94
+ " if current_entity == \"SERVICE\":\n",
95
+ " mapped_service = map_service(\" \".join(current_tokens))\n",
96
+ " if mapped_service:\n",
97
+ " entities[current_entity].append(mapped_service)\n",
98
+ " else:\n",
99
+ " entities[current_entity].append(\" \".join(current_tokens))\n",
100
+ " current_entity = label[2:]\n",
101
+ " current_tokens = [word]\n",
102
+ " elif label.startswith(\"I-\") and current_entity:\n",
103
+ " current_tokens.append(word)\n",
104
+ " else:\n",
105
+ " if current_entity:\n",
106
+ " if current_entity == \"SERVICE\":\n",
107
+ " mapped_service = map_service(\" \".join(current_tokens))\n",
108
+ " if mapped_service:\n",
109
+ " entities[current_entity].append(mapped_service)\n",
110
+ " else:\n",
111
+ " entities[current_entity].append(\" \".join(current_tokens))\n",
112
+ " current_entity = None\n",
113
+ " current_tokens = []\n",
114
+ " \n",
115
+ " if current_entity:\n",
116
+ " if current_entity == \"SERVICE\":\n",
117
+ " mapped_service = map_service(\" \".join(current_tokens))\n",
118
+ " if mapped_service:\n",
119
+ " entities[current_entity].append(mapped_service)\n",
120
+ " else:\n",
121
+ " entities[current_entity].append(\" \".join(current_tokens))\n",
122
+ " \n",
123
+ " # Remove duplicates and keep only the first service if multiple are detected\n",
124
+ " if entities[\"SERVICE\"]:\n",
125
+ " entities[\"SERVICE\"] = [entities[\"SERVICE\"][0]]\n",
126
+ " \n",
127
+ " return entities"
128
+ ],
129
+ "outputs": [],
130
+ "execution_count": 3
131
+ },
132
+ {
133
+ "metadata": {
134
+ "ExecuteTime": {
135
+ "end_time": "2024-10-18T02:59:36.198002Z",
136
+ "start_time": "2024-10-18T02:59:36.078020Z"
137
+ }
138
+ },
139
+ "cell_type": "code",
140
+ "source": [
141
+ "# Test function\n",
142
+ "def test_ner_onnx(text):\n",
143
+ " print(f\"Input: {text}\")\n",
144
+ " result = predict_onnx(text)\n",
145
+ " print(\"Output:\", result)\n",
146
+ " return result\n",
147
+ "\n",
148
+ "# Test \n",
149
+ "sample_texts = [\n",
150
+ " \"DAT khách sạn ở Hà Nội\",\n",
151
+ " \"flight to New York\",\n",
152
+ " \"Thuê xe ở Đà Nẵng\",\n",
153
+ " \"Đặt tour du lịch Hội An\",\n",
154
+ " \"I need a ticket for the museum in Paris\"\n",
155
+ "]\n",
156
+ "\n",
157
+ "for text in sample_texts:\n",
158
+ " test_ner_onnx(text)\n",
159
+ " print()"
160
+ ],
161
+ "id": "7dce81aa4d60eb94",
162
+ "outputs": [
163
+ {
164
+ "name": "stdout",
165
+ "output_type": "stream",
166
+ "text": [
167
+ "Input: DAT khách sạn ở Hà Nội\n",
168
+ "Output: {'SERVICE': ['hotel'], 'LOCATION': ['Hà Nội']}\n",
169
+ "\n",
170
+ "Input: flight to New York\n",
171
+ "Output: {'SERVICE': ['flight'], 'LOCATION': ['York']}\n",
172
+ "\n",
173
+ "Input: Thuê xe ở Đà Nẵng\n",
174
+ "Output: {'SERVICE': ['car rental'], 'LOCATION': ['Đà Nẵng']}\n",
175
+ "\n",
176
+ "Input: Đặt tour du lịch Hội An\n",
177
+ "Output: {'SERVICE': ['tour'], 'LOCATION': ['Hội An']}\n",
178
+ "\n",
179
+ "Input: I need a ticket for the museum in Paris\n",
180
+ "Output: {'SERVICE': ['ticket'], 'LOCATION': ['Paris']}\n",
181
+ "\n"
182
+ ]
183
+ }
184
+ ],
185
+ "execution_count": 8
186
+ },
187
+ {
188
+ "metadata": {},
189
+ "cell_type": "code",
190
+ "source": "",
191
+ "id": "9fe0694b3e890582",
192
+ "outputs": [],
193
+ "execution_count": null
194
+ }
195
+ ],
196
+ "metadata": {
197
+ "kernelspec": {
198
+ "display_name": "Python 3",
199
+ "language": "python",
200
+ "name": "python3"
201
+ },
202
+ "language_info": {
203
+ "codemirror_mode": {
204
+ "name": "ipython",
205
+ "version": 2
206
+ },
207
+ "file_extension": ".py",
208
+ "mimetype": "text/x-python",
209
+ "name": "python",
210
+ "nbconvert_exporter": "python",
211
+ "pygments_lexer": "ipython2",
212
+ "version": "2.7.6"
213
+ }
214
+ },
215
+ "nbformat": 4,
216
+ "nbformat_minor": 5
217
+ }
eval_dataset.json ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "queries": [
3
+ {
4
+ "text": "Khách sạn giá rẻ ở Hà Nội",
5
+ "entities": [
6
+ [10, 17, "SERVICE", "hotel"],
7
+ [22, 28, "LOCATION", "Hà Nội"]
8
+ ]
9
+ },
10
+ {
11
+ "text": "Vé máy bay đi Đà Nẵng",
12
+ "entities": [
13
+ [4, 13, "SERVICE", "flight"],
14
+ [17, 25, "LOCATION", "Đà Nẵng"]
15
+ ]
16
+ },
17
+ {
18
+ "text": "Tour du lịch Huế 3 ngày 2 đêm",
19
+ "entities": [
20
+ [4, 10, "SERVICE", "tour"],
21
+ [14, 18, "LOCATION", "Huế"]
22
+ ]
23
+ },
24
+ {
25
+ "text": "Thuê xe hơi ở Sài Gòn",
26
+ "entities": [
27
+ [6, 15, "SERVICE", "car rental"],
28
+ [20, 28, "LOCATION", "Sài Gòn"]
29
+ ]
30
+ },
31
+ {
32
+ "text": "Vé tham quan Vịnh Hạ Long",
33
+ "entities": [
34
+ [4, 12, "SERVICE", "ticket"],
35
+ [16, 27, "LOCATION", "Hạ Long"]
36
+ ]
37
+ },
38
+ {
39
+ "text": "Khách sạn gần biển ở Nha Trang",
40
+ "entities": [
41
+ [10, 17, "SERVICE", "hotel"],
42
+ [22, 29, "LOCATION", "Nha Trang"]
43
+ ]
44
+ },
45
+ {
46
+ "text": "Tour du lịch Đà Lạt giá rẻ",
47
+ "entities": [
48
+ [4, 10, "SERVICE", "tour"],
49
+ [14, 21, "LOCATION", "Đà Lạt"]
50
+ ]
51
+ },
52
+ {
53
+ "text": "Vé máy bay đi Phú Quốc",
54
+ "entities": [
55
+ [4, 13, "SERVICE", "flight"],
56
+ [17, 26, "LOCATION", "Phú Quốc"]
57
+ ]
58
+ },
59
+ {
60
+ "text": "Thuê xe máy ở Hội An",
61
+ "entities": [
62
+ [6, 15, "SERVICE", "car rental"],
63
+ [20, 26, "LOCATION", "Hội An"]
64
+ ]
65
+ },
66
+ {
67
+ "text": "Vé tham quan Cù Lao Chàm",
68
+ "entities": [
69
+ [4, 12, "SERVICE", "ticket"],
70
+ [16, 27, "LOCATION", "Cù Lao Chàm"]
71
+ ]
72
+ },
73
+ {
74
+ "text": "Khách sạn 4 sao ở Cần Thơ",
75
+ "entities": [
76
+ [10, 17, "SERVICE", "hotel"],
77
+ [22, 28, "LOCATION", "Cần Thơ"]
78
+ ]
79
+ },
80
+ {
81
+ "text": "Tour du lịch Sa Pa 2 ngày 1 đêm",
82
+ "entities": [
83
+ [4, 10, "SERVICE", "tour"],
84
+ [14, 18, "LOCATION", "Sa Pa"]
85
+ ]
86
+ },
87
+ {
88
+ "text": "Vé máy bay đi Quy Nhơn",
89
+ "entities": [
90
+ [4, 13, "SERVICE", "flight"],
91
+ [17, 26, "LOCATION", "Quy Nhơn"]
92
+ ]
93
+ },
94
+ {
95
+ "text": "Thuê xe hơi ở Đà Nẵng",
96
+ "entities": [
97
+ [6, 15, "SERVICE", "car rental"],
98
+ [20, 28, "LOCATION", "Đà Nẵng"]
99
+ ]
100
+ },
101
+ {
102
+ "text": "Vé tham quan Phong Nha - Kẻ Bàng",
103
+ "entities": [
104
+ [4, 12, "SERVICE", "ticket"],
105
+ [16, 34, "LOCATION", "Phong Nha"]
106
+ ]
107
+ },
108
+ {
109
+ "text": "Khách sạn gần biển ở Phan Thiết",
110
+ "entities": [
111
+ [10, 17, "SERVICE", "hotel"],
112
+ [22, 31, "LOCATION", "Phan Thiết"]
113
+ ]
114
+ },
115
+ {
116
+ "text": "Tour du lịch Mũi Né 4 ngày 3 đêm",
117
+ "entities": [
118
+ [4, 10, "SERVICE", "tour"],
119
+ [14, 20, "LOCATION", "Mũi Né"]
120
+ ]
121
+ },
122
+ {
123
+ "text": "Vé máy bay đi Nha Trang",
124
+ "entities": [
125
+ [4, 13, "SERVICE", "flight"],
126
+ [17, 25, "LOCATION", "Nha Trang"]
127
+ ]
128
+ },
129
+ {
130
+ "text": "Thuê xe máy ở Vũng Tàu",
131
+ "entities": [
132
+ [6, 15, "SERVICE", "car rental"],
133
+ [20, 29, "LOCATION", "Vũng Tàu"]
134
+ ]
135
+ },
136
+ {
137
+ "text": "Vé tham quan Di sản Mỹ Sơn",
138
+ "entities": [
139
+ [4, 12, "SERVICE", "ticket"],
140
+ [16, 29, "LOCATION", "Mỹ Sơn"]
141
+ ]
142
+ },
143
+ {
144
+ "text": "Khách sạn 5 sao ở Hải Phòng",
145
+ "entities": [
146
+ [10, 17, "SERVICE", "hotel"],
147
+ [22, 30, "LOCATION", "Hải Phòng"]
148
+ ]
149
+ },
150
+ {
151
+ "text": "Tour du lịch Ninh Bình 1 ngày",
152
+ "entities": [
153
+ [4, 10, "SERVICE", "tour"],
154
+ [14, 22, "LOCATION", "Ninh Bình"]
155
+ ]
156
+ },
157
+ {
158
+ "text": "Vé máy bay đi Quảng Ninh",
159
+ "entities": [
160
+ [4, 13, "SERVICE", "flight"],
161
+ [17, 28, "LOCATION", "Quảng Ninh"]
162
+ ]
163
+ },
164
+ {
165
+ "text": "Thuê xe hơi ở Hà Nội",
166
+ "entities": [
167
+ [6, 15, "SERVICE", "car rental"],
168
+ [20, 26, "LOCATION", "Hà Nội"]
169
+ ]
170
+ },
171
+ {
172
+ "text": "Vé tham quan Bái Đính",
173
+ "entities": [
174
+ [4, 12, "SERVICE", "ticket"],
175
+ [16, 24, "LOCATION", "Bái Đính"]
176
+ ]
177
+ },
178
+ {
179
+ "text": "Khách sạn gần Hồ Gươm ở Hà Nội",
180
+ "entities": [
181
+ [10, 17, "SERVICE", "hotel"],
182
+ [22, 28, "LOCATION", "Hà Nội"]
183
+ ]
184
+ },
185
+ {
186
+ "text": "Tour du lịch Phú Quốc 5 ngày 4 đêm",
187
+ "entities": [
188
+ [4, 10, "SERVICE", "tour"],
189
+ [14, 23, "LOCATION", "Phú Quốc"]
190
+ ]
191
+ },
192
+ {
193
+ "text": "Vé máy bay đi Côn Đảo",
194
+ "entities": [
195
+ [4, 13, "SERVICE", "flight"],
196
+ [17, 25, "LOCATION", "Côn Đảo"]
197
+ ]
198
+ },
199
+ {
200
+ "text": "Thuê xe máy ở Đà Lạt",
201
+ "entities": [
202
+ [6, 15, "SERVICE", "car rental"],
203
+ [20, 27, "LOCATION", "Đà Lạt"]
204
+ ]
205
+ },
206
+ {
207
+ "text": "Vé tham quan Thác Bản Giốc",
208
+ "entities": [
209
+ [4, 12, "SERVICE", "ticket"],
210
+ [16, 28, "LOCATION", "Bản Giốc"]
211
+ ]
212
+ },
213
+ {
214
+ "text": "Khách sạn gần sân bay ở Đà Nẵng",
215
+ "entities": [
216
+ [10, 17, "SERVICE", "hotel"],
217
+ [22, 28, "LOCATION", "Đà Nẵng"]
218
+ ]
219
+ },
220
+ {
221
+ "text": "Tour du lịch Hạ Long 3 ngày 2 đêm",
222
+ "entities": [
223
+ [4, 10, "SERVICE", "tour"],
224
+ [14, 21, "LOCATION", "Hạ Long"]
225
+ ]
226
+ },
227
+ {
228
+ "text": "Vé máy bay đi Huế",
229
+ "entities": [
230
+ [4, 13, "SERVICE", "flight"],
231
+ [17, 20, "LOCATION", "Huế"]
232
+ ]
233
+ },
234
+ {
235
+ "text": "Thuê xe hơi ở Nha Trang",
236
+ "entities": [
237
+ [6, 15, "SERVICE", "car rental"],
238
+ [20, 28, "LOCATION", "Nha Trang"]
239
+ ]
240
+ },
241
+ {
242
+ "text": "Vé tham quan Chùa Hương",
243
+ "entities": [
244
+ [4, 12, "SERVICE", "ticket"],
245
+ [16, 27, "LOCATION", "Chùa Hương"]
246
+ ]
247
+ },
248
+ {
249
+ "text": "Khách sạn gần biển ở Phú Quốc",
250
+ "entities": [
251
+ [10, 17, "SERVICE", "hotel"],
252
+ [22, 31, "LOCATION", "Phú Quốc"]
253
+ ]
254
+ },
255
+ {
256
+ "text": "Tour du lịch Cần Thơ 2 ngày 1 đêm",
257
+ "entities": [
258
+ [4, 10, "SERVICE", "tour"],
259
+ [14, 21, "LOCATION", "Cần Thơ"]
260
+ ]
261
+ },
262
+ {
263
+ "text": "Vé máy bay đi Vũng Tàu",
264
+ "entities": [
265
+ [4, 13, "SERVICE", "flight"],
266
+ [17, 26, "LOCATION", "Vũng Tàu"]
267
+ ]
268
+ },
269
+ {
270
+ "text": "Thuê xe máy ở Quy Nhơn",
271
+ "entities": [
272
+ [6, 15, "SERVICE", "car rental"],
273
+ [20, 28, "LOCATION", "Quy Nhơn"]
274
+ ]
275
+ },
276
+ {
277
+ "text": "Vé tham quan Biển Hồ Tà Đùng",
278
+ "entities": [
279
+ [4, 12, "SERVICE", "ticket"],
280
+ [16, 31, "LOCATION", "Tà Đùng"]
281
+ ]
282
+ },
283
+ {
284
+ "text": "Cheap hotels in London",
285
+ "entities": [
286
+ [5, 11, "SERVICE", "hotel"],
287
+ [15, 21, "LOCATION", "London"]
288
+ ]
289
+ },
290
+ {
291
+ "text": "Flights to Paris next week",
292
+ "entities": [
293
+ [0, 7, "SERVICE", "flight"],
294
+ [11, 16, "LOCATION", "Paris"]
295
+ ]
296
+ },
297
+ {
298
+ "text": "Car rental in Rome for a week",
299
+ "entities": [
300
+ [4, 13, "SERVICE", "car rental"],
301
+ [17, 21, "LOCATION", "Rome"]
302
+ ]
303
+ },
304
+ {
305
+ "text": "Tours in Tokyo for 3 days",
306
+ "entities": [
307
+ [0, 5, "SERVICE", "tour"],
308
+ [10, 15, "LOCATION", "Tokyo"]
309
+ ]
310
+ },
311
+ {
312
+ "text": "Tickets to the Grand Canyon",
313
+ "entities": [
314
+ [0, 7, "SERVICE", "ticket"],
315
+ [14, 25, "LOCATION", "Canyon"]
316
+ ]
317
+ },
318
+ {
319
+ "text": "Luxury hotels in Dubai",
320
+ "entities": [
321
+ [5, 11, "SERVICE", "hotel"],
322
+ [15, 19, "LOCATION", "Dubai"]
323
+ ]
324
+ },
325
+ {
326
+ "text": "Car rental in Barcelona",
327
+ "entities": [
328
+ [4, 13, "SERVICE", "car rental"],
329
+ [17, 26, "LOCATION", "Barcelona"]
330
+ ]
331
+ },
332
+ {
333
+ "text": "Tours in Amsterdam next month",
334
+ "entities": [
335
+ [0, 5, "SERVICE", "tour"],
336
+ [10, 18, "LOCATION", "Amsterdam"]
337
+ ]
338
+ }
339
+ ]
340
+ }
ner_model.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:99a8a5faa44ee7c4dba50d4d16ccd4d863dcdbdf74be3d68102a0fec4a140e51
3
+ size 1110146455
results/best_model/config.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "xlm-roberta-base",
3
+ "architectures": [
4
+ "XLMRobertaForTokenClassification"
5
+ ],
6
+ "attention_probs_dropout_prob": 0.1,
7
+ "bos_token_id": 0,
8
+ "classifier_dropout": null,
9
+ "eos_token_id": 2,
10
+ "hidden_act": "gelu",
11
+ "hidden_dropout_prob": 0.1,
12
+ "hidden_size": 768,
13
+ "id2label": {
14
+ "0": "LABEL_0",
15
+ "1": "LABEL_1",
16
+ "2": "LABEL_2",
17
+ "3": "LABEL_3",
18
+ "4": "LABEL_4"
19
+ },
20
+ "initializer_range": 0.02,
21
+ "intermediate_size": 3072,
22
+ "label2id": {
23
+ "LABEL_0": 0,
24
+ "LABEL_1": 1,
25
+ "LABEL_2": 2,
26
+ "LABEL_3": 3,
27
+ "LABEL_4": 4
28
+ },
29
+ "layer_norm_eps": 1e-05,
30
+ "max_position_embeddings": 514,
31
+ "model_type": "xlm-roberta",
32
+ "num_attention_heads": 12,
33
+ "num_hidden_layers": 12,
34
+ "output_past": true,
35
+ "pad_token_id": 1,
36
+ "position_embedding_type": "absolute",
37
+ "torch_dtype": "float32",
38
+ "transformers_version": "4.45.2",
39
+ "type_vocab_size": 1,
40
+ "use_cache": true,
41
+ "vocab_size": 250002
42
+ }
results/best_model/model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:33eada957c7902b4dcd725b56fb490faecfe5bc29a39d3f15bcb4d2ccc7e9b6e
3
+ size 1109851652
results/best_model/special_tokens_map.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": "<s>",
3
+ "cls_token": "<s>",
4
+ "eos_token": "</s>",
5
+ "mask_token": {
6
+ "content": "<mask>",
7
+ "lstrip": true,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false
11
+ },
12
+ "pad_token": "<pad>",
13
+ "sep_token": "</s>",
14
+ "unk_token": "<unk>"
15
+ }
results/best_model/tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a514807cffabd8abaf028cfaffe7ff0c4f60b97ea2db80c41f14172ae6b018ca
3
+ size 17082987
results/best_model/tokenizer_config.json ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "<s>",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "1": {
12
+ "content": "<pad>",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "2": {
20
+ "content": "</s>",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "3": {
28
+ "content": "<unk>",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "250001": {
36
+ "content": "<mask>",
37
+ "lstrip": true,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ }
43
+ },
44
+ "bos_token": "<s>",
45
+ "clean_up_tokenization_spaces": false,
46
+ "cls_token": "<s>",
47
+ "eos_token": "</s>",
48
+ "mask_token": "<mask>",
49
+ "model_max_length": 512,
50
+ "pad_token": "<pad>",
51
+ "sep_token": "</s>",
52
+ "tokenizer_class": "XLMRobertaTokenizer",
53
+ "unk_token": "<unk>"
54
+ }
results/best_model/training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:670c419b0fc9600bd4b1554da06d53ef018d670cc84f0fec622ea835f10c03e1
3
+ size 5176
test.ipynb ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "id": "initial_id",
6
+ "metadata": {
7
+ "collapsed": true,
8
+ "ExecuteTime": {
9
+ "end_time": "2024-10-18T02:33:03.992606Z",
10
+ "start_time": "2024-10-18T02:33:03.198886Z"
11
+ }
12
+ },
13
+ "source": [
14
+ "from transformers import AutoTokenizer, AutoModelForTokenClassification\n",
15
+ "import torch\n",
16
+ "\n",
17
+ "# Load the saved model and tokenizer\n",
18
+ "model_path = \"./results/best_model\"\n",
19
+ "tokenizer = AutoTokenizer.from_pretrained(model_path)\n",
20
+ "model = AutoModelForTokenClassification.from_pretrained(model_path)\n",
21
+ "\n",
22
+ "service_mapping = {\n",
23
+ " \"hotel\": [\"hotel\", \"hotels\", \"khách sạn\", \"khach san\", \"ks\"],\n",
24
+ " \"flight\": [\"flight\", \"flights\", \"vé máy bay\", \"máy bay\",\"may bay\"],\n",
25
+ " \"car rental\": [\"car rental\", \"car rentals\", \"thuê xe\", \"xe\"],\n",
26
+ " \"ticket\": [\"ticket\", \"tickets\", \"vé\", \"vé tham quan\",\"ve\", \"ve tham quan\"],\n",
27
+ " \"tour\": [\"tour\", \"tours\", \"du lịch\",\"du lich\"]\n",
28
+ " }\n",
29
+ "\n",
30
+ "# Define id2label mapping\n",
31
+ "id2label = {0: \"O\", 1: \"B-SERVICE\", 2: \"I-SERVICE\", 3: \"B-LOCATION\", 4: \"I-LOCATION\"}\n",
32
+ "\n",
33
+ "def map_service(service):\n",
34
+ " service = service.lower()\n",
35
+ " for key, values in service_mapping.items():\n",
36
+ " if any(v in service for v in values):\n",
37
+ " return key\n",
38
+ " return None\n",
39
+ "\n",
40
+ "def predict(text):\n",
41
+ " # Tokenize the input text\n",
42
+ " inputs = tokenizer(text, return_tensors=\"pt\", truncation=True, padding=True)\n",
43
+ " with torch.no_grad():\n",
44
+ " outputs = model(**inputs)\n",
45
+ " predictions = torch.argmax(outputs.logits, dim=2)\n",
46
+ " predicted_labels = [id2label[p.item()] for p in predictions[0]]\n",
47
+ " word_ids = inputs.word_ids()\n",
48
+ " aligned_labels = []\n",
49
+ " current_word = None\n",
50
+ " for word_id, label in zip(word_ids, predicted_labels):\n",
51
+ " if word_id != current_word:\n",
52
+ " aligned_labels.append(label)\n",
53
+ " current_word = word_id\n",
54
+ " \n",
55
+ " # Extract entities\n",
56
+ " entities = {\"SERVICE\": [], \"LOCATION\": []}\n",
57
+ " current_entity = None\n",
58
+ " current_tokens = []\n",
59
+ " \n",
60
+ " words = text.split()\n",
61
+ " for word, label in zip(words, aligned_labels):\n",
62
+ " if label.startswith(\"B-\"):\n",
63
+ " if current_entity:\n",
64
+ " if current_entity == \"SERVICE\":\n",
65
+ " mapped_service = map_service(\" \".join(current_tokens))\n",
66
+ " if mapped_service:\n",
67
+ " entities[current_entity].append(mapped_service)\n",
68
+ " else:\n",
69
+ " entities[current_entity].append(\" \".join(current_tokens))\n",
70
+ " current_entity = label[2:]\n",
71
+ " current_tokens = [word]\n",
72
+ " elif label.startswith(\"I-\") and current_entity:\n",
73
+ " current_tokens.append(word)\n",
74
+ " else:\n",
75
+ " if current_entity:\n",
76
+ " if current_entity == \"SERVICE\":\n",
77
+ " mapped_service = map_service(\" \".join(current_tokens))\n",
78
+ " if mapped_service:\n",
79
+ " entities[current_entity].append(mapped_service)\n",
80
+ " else:\n",
81
+ " entities[current_entity].append(\" \".join(current_tokens))\n",
82
+ " current_entity = None\n",
83
+ " current_tokens = []\n",
84
+ " \n",
85
+ " if current_entity:\n",
86
+ " if current_entity == \"SERVICE\":\n",
87
+ " mapped_service = map_service(\" \".join(current_tokens))\n",
88
+ " if mapped_service:\n",
89
+ " entities[current_entity].append(mapped_service)\n",
90
+ " else:\n",
91
+ " entities[current_entity].append(\" \".join(current_tokens))\n",
92
+ " \n",
93
+ " if entities[\"SERVICE\"]:\n",
94
+ " entities[\"SERVICE\"] = [entities[\"SERVICE\"][0]]\n",
95
+ " \n",
96
+ " return entities\n",
97
+ "\n",
98
+ "# Test function\n",
99
+ "def test_ner(text):\n",
100
+ " print(f\"Input: {text}\")\n",
101
+ " result = predict(text)\n",
102
+ " print(\"Output:\", result)\n",
103
+ " return result"
104
+ ],
105
+ "outputs": [],
106
+ "execution_count": 3
107
+ },
108
+ {
109
+ "metadata": {
110
+ "ExecuteTime": {
111
+ "end_time": "2024-10-18T03:19:29.075358Z",
112
+ "start_time": "2024-10-18T03:19:28.999181Z"
113
+ }
114
+ },
115
+ "cell_type": "code",
116
+ "source": [
117
+ "test_texts = [\n",
118
+ " \"tour du lich gia re da lat\"\n",
119
+ "]\n",
120
+ "\n",
121
+ "for text in test_texts:\n",
122
+ " test_ner(text)\n",
123
+ " print()"
124
+ ],
125
+ "id": "65a6a938b3590ad2",
126
+ "outputs": [
127
+ {
128
+ "name": "stdout",
129
+ "output_type": "stream",
130
+ "text": [
131
+ "Input: tour du lich gia re da lat\n",
132
+ "Output: {'SERVICE': ['tour'], 'LOCATION': ['da lat']}\n",
133
+ "\n"
134
+ ]
135
+ }
136
+ ],
137
+ "execution_count": 13
138
+ },
139
+ {
140
+ "metadata": {},
141
+ "cell_type": "code",
142
+ "outputs": [],
143
+ "execution_count": null,
144
+ "source": "",
145
+ "id": "826408096ee93b4"
146
+ }
147
+ ],
148
+ "metadata": {
149
+ "kernelspec": {
150
+ "display_name": "Python 3",
151
+ "language": "python",
152
+ "name": "python3"
153
+ },
154
+ "language_info": {
155
+ "codemirror_mode": {
156
+ "name": "ipython",
157
+ "version": 2
158
+ },
159
+ "file_extension": ".py",
160
+ "mimetype": "text/x-python",
161
+ "name": "python",
162
+ "nbconvert_exporter": "python",
163
+ "pygments_lexer": "ipython2",
164
+ "version": "2.7.6"
165
+ }
166
+ },
167
+ "nbformat": 4,
168
+ "nbformat_minor": 5
169
+ }
train.ipynb ADDED
@@ -0,0 +1,644 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "metadata": {
5
+ "ExecuteTime": {
6
+ "end_time": "2024-10-18T02:11:36.941568Z",
7
+ "start_time": "2024-10-18T02:11:33.662041Z"
8
+ }
9
+ },
10
+ "cell_type": "code",
11
+ "source": [
12
+ "import json\n",
13
+ "import wandb\n",
14
+ "from datasets import Dataset\n",
15
+ "from seqeval.metrics import classification_report\n",
16
+ "import wandb\n",
17
+ "\n"
18
+ ],
19
+ "id": "5323bc048545031",
20
+ "outputs": [
21
+ {
22
+ "name": "stderr",
23
+ "output_type": "stream",
24
+ "text": [
25
+ "/home/ebk/PycharmProjects/pythonProject/venv/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
26
+ " from .autonotebook import tqdm as notebook_tqdm\n"
27
+ ]
28
+ }
29
+ ],
30
+ "execution_count": 1
31
+ },
32
+ {
33
+ "metadata": {
34
+ "ExecuteTime": {
35
+ "end_time": "2024-10-18T02:11:36.959310Z",
36
+ "start_time": "2024-10-18T02:11:36.944303Z"
37
+ }
38
+ },
39
+ "cell_type": "code",
40
+ "source": [
41
+ "def prepare_data(file_path):\n",
42
+ " with open(file_path, 'r', encoding='utf-8') as f:\n",
43
+ " data = json.load(f)\n",
44
+ " \n",
45
+ " service_mapping = {\n",
46
+ " \"hotel\": [\"hotel\", \"hotels\", \"khách sạn\", \"khach san\", \"ks\"],\n",
47
+ " \"flight\": [\"flight\", \"flights\", \"vé máy bay\", \"máy bay\",\"may bay\"],\n",
48
+ " \"car rental\": [\"car rental\", \"car rentals\", \"thuê xe\", \"xe\"],\n",
49
+ " \"ticket\": [\"ticket\", \"tickets\", \"vé\", \"vé tham quan\",\"ve\", \"ve tham quan\"],\n",
50
+ " \"tour\": [\"tour\", \"tours\", \"du lịch\",\"du lich\"]\n",
51
+ " }\n",
52
+ " \n",
53
+ " processed_data = []\n",
54
+ " for query in data['queries']:\n",
55
+ " words = query['text'].split()\n",
56
+ " labels = ['O'] * len(words) \n",
57
+ " \n",
58
+ " lower_words = [w.lower() for w in words]\n",
59
+ " for start, end, entity_type, entity_text in query['entities']:\n",
60
+ " if entity_type == \"SERVICE\":\n",
61
+ " search_terms = service_mapping.get(entity_text.lower(), [entity_text.lower()])\n",
62
+ " else:\n",
63
+ " search_terms = [entity_text.lower()]\n",
64
+ " \n",
65
+ " found = False\n",
66
+ " for term in search_terms:\n",
67
+ " term_words = term.split()\n",
68
+ " for i in range(len(lower_words) - len(term_words) + 1):\n",
69
+ " if lower_words[i:i+len(term_words)] == term_words:\n",
70
+ " for j in range(len(term_words)):\n",
71
+ " labels[i+j] = f'B-{entity_type}' if j == 0 else f'I-{entity_type}'\n",
72
+ " found = True\n",
73
+ " break\n",
74
+ " if found:\n",
75
+ " break\n",
76
+ " \n",
77
+ " if not found:\n",
78
+ " print(f\"Warning: Entity '{entity_text}' not found in text '{query['text']}'\")\n",
79
+ " \n",
80
+ " # Keep the original capitalization in 'words'\n",
81
+ " processed_data.append({'words': words, 'labels': labels})\n",
82
+ " \n",
83
+ " return Dataset.from_list(processed_data)\n",
84
+ "\n",
85
+ "# Load data\n",
86
+ "train_dataset = prepare_data('/home/ebk/Desktop/NER model/train_dataset.json')\n",
87
+ "eval_dataset = prepare_data('/home/ebk/Desktop/NER model/eval_dataset.json')\n"
88
+ ],
89
+ "id": "3bead420acaa0a20",
90
+ "outputs": [],
91
+ "execution_count": 2
92
+ },
93
+ {
94
+ "metadata": {
95
+ "ExecuteTime": {
96
+ "end_time": "2024-10-18T02:27:59.106340Z",
97
+ "start_time": "2024-10-18T02:11:37.016627Z"
98
+ }
99
+ },
100
+ "cell_type": "code",
101
+ "source": [
102
+ "from transformers import AutoTokenizer, AutoModelForTokenClassification, TrainingArguments, Trainer, EarlyStoppingCallback\n",
103
+ "from transformers import DataCollatorForTokenClassification\n",
104
+ "import numpy as np\n",
105
+ "\n",
106
+ "# Load tokenizer and model\n",
107
+ "model_name = \"xlm-roberta-base\" \n",
108
+ "tokenizer = AutoTokenizer.from_pretrained(model_name)\n",
109
+ "model = AutoModelForTokenClassification.from_pretrained(model_name, num_labels=5)\n",
110
+ "\n",
111
+ "# Prepare label list and id2label, label2id mappings\n",
112
+ "label_list = [\"O\", \"B-SERVICE\", \"I-SERVICE\", \"B-LOCATION\", \"I-LOCATION\"]\n",
113
+ "id2label = {i: label for i, label in enumerate(label_list)}\n",
114
+ "label2id = {v: k for k, v in id2label.items()}\n",
115
+ "\n",
116
+ "def tokenize_and_align_labels(examples):\n",
117
+ " tokenized_inputs = tokenizer(examples[\"words\"], truncation=True, is_split_into_words=True, padding=True, max_length=256)\n",
118
+ " labels = []\n",
119
+ " for i, label in enumerate(examples[\"labels\"]):\n",
120
+ " word_ids = tokenized_inputs.word_ids(batch_index=i)\n",
121
+ " previous_word_idx = None\n",
122
+ " label_ids = []\n",
123
+ " for word_idx in word_ids:\n",
124
+ " if word_idx is None:\n",
125
+ " label_ids.append(-100)\n",
126
+ " elif word_idx != previous_word_idx:\n",
127
+ " label_ids.append(label2id[label[word_idx]])\n",
128
+ " else:\n",
129
+ " label_ids.append(-100)\n",
130
+ " previous_word_idx = word_idx\n",
131
+ " labels.append(label_ids)\n",
132
+ " tokenized_inputs[\"labels\"] = labels\n",
133
+ " return tokenized_inputs\n",
134
+ "\n",
135
+ "# Data augmentation: add lowercase versions\n",
136
+ "def augment_data(examples):\n",
137
+ " new_examples = {\n",
138
+ " \"words\": examples[\"words\"] + [[word.lower() for word in sentence] for sentence in examples[\"words\"]],\n",
139
+ " \"labels\": examples[\"labels\"] * 2 # Duplicate labels for lowercase versions\n",
140
+ " }\n",
141
+ " return new_examples\n",
142
+ "\n",
143
+ "# Apply data augmentation and tokenization\n",
144
+ "augmented_train = train_dataset.map(augment_data, batched=True, remove_columns=train_dataset.column_names)\n",
145
+ "augmented_eval = eval_dataset.map(augment_data, batched=True, remove_columns=eval_dataset.column_names)\n",
146
+ "\n",
147
+ "tokenized_train = augmented_train.map(tokenize_and_align_labels, batched=True)\n",
148
+ "tokenized_eval = augmented_eval.map(tokenize_and_align_labels, batched=True)\n",
149
+ "\n",
150
+ "wandb_token = \"a9e921f396228ca94645883d100e8bc7624a2737\"\n",
151
+ "wandb.login(key=wandb_token)\n",
152
+ "run = wandb.init(\n",
153
+ " project='',\n",
154
+ " job_type=\"training\",\n",
155
+ " anonymous=\"allow\"\n",
156
+ ")\n",
157
+ "# Define training arguments\n",
158
+ "training_args = TrainingArguments(\n",
159
+ " output_dir=\"./results\",\n",
160
+ " evaluation_strategy=\"epoch\",\n",
161
+ " save_strategy=\"epoch\", # Add this line to match evaluation_strategy\n",
162
+ " learning_rate=2e-5,\n",
163
+ " per_device_train_batch_size=16,\n",
164
+ " per_device_eval_batch_size=16,\n",
165
+ " num_train_epochs=10,\n",
166
+ " weight_decay=0.01,\n",
167
+ " save_total_limit=2,\n",
168
+ " load_best_model_at_end=True,\n",
169
+ " metric_for_best_model=\"eval_loss\",\n",
170
+ " greater_is_better=False,\n",
171
+ " warmup_steps=500,\n",
172
+ " lr_scheduler_type=\"linear\",\n",
173
+ " logging_dir='./logs',\n",
174
+ " logging_steps=100,\n",
175
+ " report_to=\"wandb\",\n",
176
+ ")\n",
177
+ "\n",
178
+ "# Define data collator\n",
179
+ "data_collator = DataCollatorForTokenClassification(tokenizer=tokenizer)\n",
180
+ "\n",
181
+ "# Define Trainer\n",
182
+ "trainer = Trainer(\n",
183
+ " model=model,\n",
184
+ " args=training_args,\n",
185
+ " train_dataset=tokenized_train,\n",
186
+ " eval_dataset=tokenized_eval,\n",
187
+ " tokenizer=tokenizer,\n",
188
+ " data_collator=data_collator,\n",
189
+ " callbacks=[EarlyStoppingCallback(early_stopping_patience=3)]\n",
190
+ ")\n",
191
+ "\n",
192
+ "# Train the model\n",
193
+ "trainer.train()\n"
194
+ ],
195
+ "id": "4113c9be904ec16a",
196
+ "outputs": [
197
+ {
198
+ "name": "stderr",
199
+ "output_type": "stream",
200
+ "text": [
201
+ "Some weights of XLMRobertaForTokenClassification were not initialized from the model checkpoint at xlm-roberta-base and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
202
+ "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n",
203
+ "Map: 100%|██████████| 544/544 [00:00<00:00, 62863.71 examples/s]\n",
204
+ "Map: 100%|██████████| 48/48 [00:00<00:00, 23307.08 examples/s]\n",
205
+ "Map: 100%|██████████| 1088/1088 [00:00<00:00, 35149.87 examples/s]\n",
206
+ "Map: 100%|██████████| 96/96 [00:00<00:00, 22730.79 examples/s]\n",
207
+ "\u001B[34m\u001B[1mwandb\u001B[0m: Using wandb-core as the SDK backend. Please refer to https://wandb.me/wandb-core for more information.\n",
208
+ "\u001B[34m\u001B[1mwandb\u001B[0m: Currently logged in as: \u001B[33mprodranek007\u001B[0m (\u001B[33mprodranek007-eh\u001B[0m). Use \u001B[1m`wandb login --relogin`\u001B[0m to force relogin\n",
209
+ "\u001B[34m\u001B[1mwandb\u001B[0m: \u001B[33mWARNING\u001B[0m If you're specifying your api key in code, ensure this code is not shared publicly.\n",
210
+ "\u001B[34m\u001B[1mwandb\u001B[0m: \u001B[33mWARNING\u001B[0m Consider setting the WANDB_API_KEY environment variable, or running `wandb login` from the command line.\n",
211
+ "\u001B[34m\u001B[1mwandb\u001B[0m: Appending key for api.wandb.ai to your netrc file: /home/ebk/.netrc\n"
212
+ ]
213
+ },
214
+ {
215
+ "data": {
216
+ "text/plain": [
217
+ "<IPython.core.display.HTML object>"
218
+ ],
219
+ "text/html": [
220
+ "Tracking run with wandb version 0.18.3"
221
+ ]
222
+ },
223
+ "metadata": {},
224
+ "output_type": "display_data"
225
+ },
226
+ {
227
+ "data": {
228
+ "text/plain": [
229
+ "<IPython.core.display.HTML object>"
230
+ ],
231
+ "text/html": [
232
+ "Run data is saved locally in <code>/home/ebk/Desktop/NER model/wandb/run-20241018_091140-tmfygpmb</code>"
233
+ ]
234
+ },
235
+ "metadata": {},
236
+ "output_type": "display_data"
237
+ },
238
+ {
239
+ "data": {
240
+ "text/plain": [
241
+ "<IPython.core.display.HTML object>"
242
+ ],
243
+ "text/html": [
244
+ "Syncing run <strong><a href='https://wandb.ai/prodranek007-eh/uncategorized/runs/tmfygpmb' target=\"_blank\">pleasant-violet-4</a></strong> to <a href='https://wandb.ai/prodranek007-eh/uncategorized' target=\"_blank\">Weights & Biases</a> (<a href='https://wandb.me/run' target=\"_blank\">docs</a>)<br/>"
245
+ ]
246
+ },
247
+ "metadata": {},
248
+ "output_type": "display_data"
249
+ },
250
+ {
251
+ "data": {
252
+ "text/plain": [
253
+ "<IPython.core.display.HTML object>"
254
+ ],
255
+ "text/html": [
256
+ " View project at <a href='https://wandb.ai/prodranek007-eh/uncategorized' target=\"_blank\">https://wandb.ai/prodranek007-eh/uncategorized</a>"
257
+ ]
258
+ },
259
+ "metadata": {},
260
+ "output_type": "display_data"
261
+ },
262
+ {
263
+ "data": {
264
+ "text/plain": [
265
+ "<IPython.core.display.HTML object>"
266
+ ],
267
+ "text/html": [
268
+ " View run at <a href='https://wandb.ai/prodranek007-eh/uncategorized/runs/tmfygpmb' target=\"_blank\">https://wandb.ai/prodranek007-eh/uncategorized/runs/tmfygpmb</a>"
269
+ ]
270
+ },
271
+ "metadata": {},
272
+ "output_type": "display_data"
273
+ },
274
+ {
275
+ "name": "stderr",
276
+ "output_type": "stream",
277
+ "text": [
278
+ "/home/ebk/PycharmProjects/pythonProject/venv/lib/python3.12/site-packages/transformers/training_args.py:1545: FutureWarning: `evaluation_strategy` is deprecated and will be removed in version 4.46 of 🤗 Transformers. Use `eval_strategy` instead\n",
279
+ " warnings.warn(\n",
280
+ "/home/ebk/PycharmProjects/pythonProject/venv/lib/python3.12/site-packages/torch/cuda/__init__.py:654: UserWarning: Can't initialize NVML\n",
281
+ " warnings.warn(\"Can't initialize NVML\")\n",
282
+ "\u001B[34m\u001B[1mwandb\u001B[0m: \u001B[33mWARNING\u001B[0m The `run_name` is currently set to the same value as `TrainingArguments.output_dir`. If this was not intended, please specify a different run name by setting the `TrainingArguments.run_name` parameter.\n"
283
+ ]
284
+ },
285
+ {
286
+ "data": {
287
+ "text/plain": [
288
+ "<IPython.core.display.HTML object>"
289
+ ],
290
+ "text/html": [
291
+ "\n",
292
+ " <div>\n",
293
+ " \n",
294
+ " <progress value='680' max='680' style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
295
+ " [680/680 16:15, Epoch 10/10]\n",
296
+ " </div>\n",
297
+ " <table border=\"1\" class=\"dataframe\">\n",
298
+ " <thead>\n",
299
+ " <tr style=\"text-align: left;\">\n",
300
+ " <th>Epoch</th>\n",
301
+ " <th>Training Loss</th>\n",
302
+ " <th>Validation Loss</th>\n",
303
+ " </tr>\n",
304
+ " </thead>\n",
305
+ " <tbody>\n",
306
+ " <tr>\n",
307
+ " <td>1</td>\n",
308
+ " <td>No log</td>\n",
309
+ " <td>1.455081</td>\n",
310
+ " </tr>\n",
311
+ " <tr>\n",
312
+ " <td>2</td>\n",
313
+ " <td>1.499700</td>\n",
314
+ " <td>0.568691</td>\n",
315
+ " </tr>\n",
316
+ " <tr>\n",
317
+ " <td>3</td>\n",
318
+ " <td>0.661400</td>\n",
319
+ " <td>0.099232</td>\n",
320
+ " </tr>\n",
321
+ " <tr>\n",
322
+ " <td>4</td>\n",
323
+ " <td>0.661400</td>\n",
324
+ " <td>0.032710</td>\n",
325
+ " </tr>\n",
326
+ " <tr>\n",
327
+ " <td>5</td>\n",
328
+ " <td>0.090000</td>\n",
329
+ " <td>0.021099</td>\n",
330
+ " </tr>\n",
331
+ " <tr>\n",
332
+ " <td>6</td>\n",
333
+ " <td>0.025300</td>\n",
334
+ " <td>0.016014</td>\n",
335
+ " </tr>\n",
336
+ " <tr>\n",
337
+ " <td>7</td>\n",
338
+ " <td>0.025300</td>\n",
339
+ " <td>0.027342</td>\n",
340
+ " </tr>\n",
341
+ " <tr>\n",
342
+ " <td>8</td>\n",
343
+ " <td>0.011600</td>\n",
344
+ " <td>0.000233</td>\n",
345
+ " </tr>\n",
346
+ " <tr>\n",
347
+ " <td>9</td>\n",
348
+ " <td>0.005600</td>\n",
349
+ " <td>0.000714</td>\n",
350
+ " </tr>\n",
351
+ " <tr>\n",
352
+ " <td>10</td>\n",
353
+ " <td>0.005600</td>\n",
354
+ " <td>0.000568</td>\n",
355
+ " </tr>\n",
356
+ " </tbody>\n",
357
+ "</table><p>"
358
+ ]
359
+ },
360
+ "metadata": {},
361
+ "output_type": "display_data"
362
+ },
363
+ {
364
+ "data": {
365
+ "text/plain": [
366
+ "TrainOutput(global_step=680, training_loss=0.3376634743283777, metrics={'train_runtime': 977.2101, 'train_samples_per_second': 11.134, 'train_steps_per_second': 0.696, 'total_flos': 99948720268800.0, 'train_loss': 0.3376634743283777, 'epoch': 10.0})"
367
+ ]
368
+ },
369
+ "execution_count": 3,
370
+ "metadata": {},
371
+ "output_type": "execute_result"
372
+ }
373
+ ],
374
+ "execution_count": 3
375
+ },
376
+ {
377
+ "metadata": {
378
+ "ExecuteTime": {
379
+ "end_time": "2024-10-18T02:28:00.239706Z",
380
+ "start_time": "2024-10-18T02:27:59.142541Z"
381
+ }
382
+ },
383
+ "cell_type": "code",
384
+ "source": [
385
+ "# After training\n",
386
+ "trainer.save_model(\"./results/best_model\")\n",
387
+ "tokenizer.save_pretrained(\"./results/best_model\")"
388
+ ],
389
+ "id": "ac89d99896df0b18",
390
+ "outputs": [
391
+ {
392
+ "data": {
393
+ "text/plain": [
394
+ "('./results/best_model/tokenizer_config.json',\n",
395
+ " './results/best_model/special_tokens_map.json',\n",
396
+ " './results/best_model/tokenizer.json')"
397
+ ]
398
+ },
399
+ "execution_count": 4,
400
+ "metadata": {},
401
+ "output_type": "execute_result"
402
+ }
403
+ ],
404
+ "execution_count": 4
405
+ },
406
+ {
407
+ "metadata": {
408
+ "ExecuteTime": {
409
+ "end_time": "2024-10-18T02:28:01.465325Z",
410
+ "start_time": "2024-10-18T02:28:00.270346Z"
411
+ }
412
+ },
413
+ "cell_type": "code",
414
+ "source": [
415
+ "# Evaluate the model\n",
416
+ "eval_results = trainer.evaluate()\n",
417
+ "print(f\"Evaluation results: {eval_results}\")\n",
418
+ "\n",
419
+ "# Function to align predictions with labels\n",
420
+ "def align_predictions(predictions, label_ids):\n",
421
+ " preds = np.argmax(predictions, axis=2)\n",
422
+ " batch_size, seq_len = preds.shape\n",
423
+ " out_label_list = [[] for _ in range(batch_size)]\n",
424
+ " preds_list = [[] for _ in range(batch_size)]\n",
425
+ " for i in range(batch_size):\n",
426
+ " for j in range(seq_len):\n",
427
+ " if label_ids[i, j] != -100:\n",
428
+ " out_label_list[i].append(id2label[label_ids[i][j]])\n",
429
+ " preds_list[i].append(id2label[preds[i][j]])\n",
430
+ " return preds_list, out_label_list\n",
431
+ "\n",
432
+ "# Get predictions\n",
433
+ "test_results = trainer.predict(tokenized_eval)\n",
434
+ "predictions, labels, _ = test_results\n",
435
+ "preds_list, out_label_list = align_predictions(predictions, labels)\n",
436
+ "\n",
437
+ "# Print classification report\n",
438
+ "print(classification_report(out_label_list, preds_list))"
439
+ ],
440
+ "id": "facbe70d87a460a",
441
+ "outputs": [
442
+ {
443
+ "data": {
444
+ "text/plain": [
445
+ "<IPython.core.display.HTML object>"
446
+ ],
447
+ "text/html": []
448
+ },
449
+ "metadata": {},
450
+ "output_type": "display_data"
451
+ },
452
+ {
453
+ "name": "stdout",
454
+ "output_type": "stream",
455
+ "text": [
456
+ "Evaluation results: {'eval_loss': 0.00023286677605938166, 'eval_runtime': 0.5843, 'eval_samples_per_second': 164.298, 'eval_steps_per_second': 10.269, 'epoch': 10.0}\n",
457
+ " precision recall f1-score support\n",
458
+ "\n",
459
+ " LOCATION 1.00 1.00 1.00 96\n",
460
+ " SERVICE 1.00 1.00 1.00 96\n",
461
+ "\n",
462
+ " micro avg 1.00 1.00 1.00 192\n",
463
+ " macro avg 1.00 1.00 1.00 192\n",
464
+ "weighted avg 1.00 1.00 1.00 192\n",
465
+ "\n"
466
+ ]
467
+ }
468
+ ],
469
+ "execution_count": 5
470
+ },
471
+ {
472
+ "metadata": {
473
+ "ExecuteTime": {
474
+ "end_time": "2024-10-18T02:28:48.953577Z",
475
+ "start_time": "2024-10-18T02:28:48.262193Z"
476
+ }
477
+ },
478
+ "cell_type": "code",
479
+ "source": [
480
+ "from transformers import AutoTokenizer, AutoModelForTokenClassification\n",
481
+ "import torch\n",
482
+ "\n",
483
+ "# Load the saved model and tokenizer\n",
484
+ "model_path = \"./results/best_model\"\n",
485
+ "tokenizer = AutoTokenizer.from_pretrained(model_path)\n",
486
+ "model = AutoModelForTokenClassification.from_pretrained(model_path)\n",
487
+ "\n",
488
+ "# Define id2label mapping\n",
489
+ "id2label = {0: \"O\", 1: \"B-SERVICE\", 2: \"I-SERVICE\", 3: \"B-LOCATION\", 4: \"I-LOCATION\"}\n",
490
+ "\n",
491
+ "service_mapping = {\n",
492
+ " \"hotel\": [\"hotel\", \"hotels\", \"khách sạn\", \"khach san\", \"ks\"],\n",
493
+ " \"flight\": [\"flight\", \"flights\", \"vé máy bay\", \"máy bay\",\"may bay\"],\n",
494
+ " \"car rental\": [\"car rental\", \"car rentals\", \"thuê xe\", \"xe\"],\n",
495
+ " \"ticket\": [\"ticket\", \"tickets\", \"vé\", \"vé tham quan\",\"ve\", \"ve tham quan\"],\n",
496
+ " \"tour\": [\"tour\", \"tours\", \"du lịch\",\"du lich\"]\n",
497
+ " }\n",
498
+ "def map_service(service):\n",
499
+ " service = service.lower()\n",
500
+ " for key, values in service_mapping.items():\n",
501
+ " if any(v in service for v in values):\n",
502
+ " return key\n",
503
+ " return None\n",
504
+ "\n",
505
+ "def predict(text):\n",
506
+ " # Tokenize the input text\n",
507
+ " inputs = tokenizer(text, return_tensors=\"pt\", truncation=True, padding=True)\n",
508
+ " \n",
509
+ " # Make prediction\n",
510
+ " with torch.no_grad():\n",
511
+ " outputs = model(**inputs)\n",
512
+ " \n",
513
+ " # Get the predicted label for each token\n",
514
+ " predictions = torch.argmax(outputs.logits, dim=2)\n",
515
+ " \n",
516
+ " # Convert prediction ids to labels\n",
517
+ " predicted_labels = [id2label[p.item()] for p in predictions[0]]\n",
518
+ " \n",
519
+ " # Align predictions with words\n",
520
+ " word_ids = inputs.word_ids()\n",
521
+ " aligned_labels = []\n",
522
+ " current_word = None\n",
523
+ " for word_id, label in zip(word_ids, predicted_labels):\n",
524
+ " if word_id != current_word:\n",
525
+ " aligned_labels.append(label)\n",
526
+ " current_word = word_id\n",
527
+ " \n",
528
+ " # Extract entities\n",
529
+ " entities = {\"SERVICE\": [], \"LOCATION\": []}\n",
530
+ " current_entity = None\n",
531
+ " current_tokens = []\n",
532
+ " \n",
533
+ " words = text.split()\n",
534
+ " for word, label in zip(words, aligned_labels):\n",
535
+ " if label.startswith(\"B-\"):\n",
536
+ " if current_entity:\n",
537
+ " if current_entity == \"SERVICE\":\n",
538
+ " mapped_service = map_service(\" \".join(current_tokens))\n",
539
+ " if mapped_service:\n",
540
+ " entities[current_entity].append(mapped_service)\n",
541
+ " else:\n",
542
+ " entities[current_entity].append(\" \".join(current_tokens))\n",
543
+ " current_entity = label[2:]\n",
544
+ " current_tokens = [word]\n",
545
+ " elif label.startswith(\"I-\") and current_entity:\n",
546
+ " current_tokens.append(word)\n",
547
+ " else:\n",
548
+ " if current_entity:\n",
549
+ " if current_entity == \"SERVICE\":\n",
550
+ " mapped_service = map_service(\" \".join(current_tokens))\n",
551
+ " if mapped_service:\n",
552
+ " entities[current_entity].append(mapped_service)\n",
553
+ " else:\n",
554
+ " entities[current_entity].append(\" \".join(current_tokens))\n",
555
+ " current_entity = None\n",
556
+ " current_tokens = []\n",
557
+ " \n",
558
+ " if current_entity:\n",
559
+ " if current_entity == \"SERVICE\":\n",
560
+ " mapped_service = map_service(\" \".join(current_tokens))\n",
561
+ " if mapped_service:\n",
562
+ " entities[current_entity].append(mapped_service)\n",
563
+ " else:\n",
564
+ " entities[current_entity].append(\" \".join(current_tokens))\n",
565
+ " \n",
566
+ " # Remove duplicates and keep only the first service if multiple are detected\n",
567
+ " if entities[\"SERVICE\"]:\n",
568
+ " entities[\"SERVICE\"] = [entities[\"SERVICE\"][0]]\n",
569
+ " \n",
570
+ " return entities\n",
571
+ "\n",
572
+ "# Test function\n",
573
+ "def test_ner(text):\n",
574
+ " print(f\"Input: {text}\")\n",
575
+ " result = predict(text)\n",
576
+ " print(\"Output:\", result)\n",
577
+ " return result"
578
+ ],
579
+ "id": "bb4a2cc37bdd801e",
580
+ "outputs": [],
581
+ "execution_count": 9
582
+ },
583
+ {
584
+ "metadata": {
585
+ "ExecuteTime": {
586
+ "end_time": "2024-10-18T02:31:21.177339Z",
587
+ "start_time": "2024-10-18T02:31:21.154825Z"
588
+ }
589
+ },
590
+ "cell_type": "code",
591
+ "source": [
592
+ "test_texts = [\n",
593
+ " \"du lich china\"\n",
594
+ "]\n",
595
+ "\n",
596
+ "for text in test_texts:\n",
597
+ " test_ner(text)\n",
598
+ " print()"
599
+ ],
600
+ "id": "9a7274e392b039d1",
601
+ "outputs": [
602
+ {
603
+ "name": "stdout",
604
+ "output_type": "stream",
605
+ "text": [
606
+ "Input: du lich china\n",
607
+ "Output: {'SERVICE': ['tour'], 'LOCATION': ['china']}\n",
608
+ "\n"
609
+ ]
610
+ }
611
+ ],
612
+ "execution_count": 17
613
+ },
614
+ {
615
+ "metadata": {},
616
+ "cell_type": "code",
617
+ "outputs": [],
618
+ "execution_count": null,
619
+ "source": "",
620
+ "id": "5680dec4570f16df"
621
+ }
622
+ ],
623
+ "metadata": {
624
+ "kernelspec": {
625
+ "display_name": "Python 3",
626
+ "language": "python",
627
+ "name": "python3"
628
+ },
629
+ "language_info": {
630
+ "codemirror_mode": {
631
+ "name": "ipython",
632
+ "version": 2
633
+ },
634
+ "file_extension": ".py",
635
+ "mimetype": "text/x-python",
636
+ "name": "python",
637
+ "nbconvert_exporter": "python",
638
+ "pygments_lexer": "ipython2",
639
+ "version": "2.7.6"
640
+ }
641
+ },
642
+ "nbformat": 4,
643
+ "nbformat_minor": 5
644
+ }
train.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from datasets import Dataset
3
+
4
+
5
+ def prepare_data(file_path):
6
+ with open(file_path, 'r', encoding='utf-8') as f:
7
+ data = json.load(f)
8
+
9
+ processed_data = []
10
+ for query in data['queries']:
11
+ words = query['text'].split()
12
+ labels = ['O'] * len(words) # 'O' for Outside (not an entity)
13
+ for start, end, entity_type, entity_text in query['entities']:
14
+ entity_words = entity_text.lower().split()
15
+ found = False
16
+ for i in range(len(words) - len(entity_words) + 1):
17
+ if [w.lower() for w in words[i:i + len(entity_words)]] == entity_words:
18
+ for j, word in enumerate(words[i:i + len(entity_words)]):
19
+ labels[i + j] = f'B-{entity_type}' if j == 0 else f'I-{entity_type}'
20
+ found = True
21
+ break
22
+ if not found:
23
+ print(f"Warning: Entity '{entity_text}' not found in text '{query['text']}'")
24
+ processed_data.append({'words': words, 'labels': labels})
25
+
26
+ return Dataset.from_list(processed_data)
27
+
28
+
29
+ train_dataset = prepare_data('/home/ebk/PycharmProjects/pythonProject/tripgo-hotel/train_dataset.json')
30
+ eval_dataset = prepare_data('/home/ebk/PycharmProjects/pythonProject/tripgo-hotel/eval_dataset.json')
31
+
train_dataset.json ADDED
@@ -0,0 +1,3818 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "queries": [
3
+ {
4
+ "text": "Tìm khách sạn ở Đà Lạt giá rẻ",
5
+ "entities": [
6
+ [4, 11, "SERVICE", "hotel"],
7
+ [15, 21, "LOCATION", "Đà Lạt"]
8
+ ]
9
+ },
10
+ {
11
+ "text": "Vé máy bay đi Singapore",
12
+ "entities": [
13
+ [4, 13, "SERVICE", "flight"],
14
+ [17, 26, "LOCATION", "Singapore"]
15
+ ]
16
+ },
17
+ {
18
+ "text": "Tour du lịch Sa Pa 4 ngày 3 đêm",
19
+ "entities": [
20
+ [4, 10, "SERVICE", "tour"],
21
+ [14, 18, "LOCATION", "Sa Pa"]
22
+ ]
23
+ },
24
+ {
25
+ "text": "Thuê xe ô tô ở Hà Nội",
26
+ "entities": [
27
+ [6, 15, "SERVICE", "car rental"],
28
+ [20, 26, "LOCATION", "Hà Nội"]
29
+ ]
30
+ },
31
+ {
32
+ "text": "Vé tham quan Tháp Chàm",
33
+ "entities": [
34
+ [4, 12, "SERVICE", "ticket"],
35
+ [16, 25, "LOCATION", "Chàm"]
36
+ ]
37
+ },
38
+ {
39
+ "text": "Khách sạn gần chợ ở Hội An",
40
+ "entities": [
41
+ [10, 17, "SERVICE", "hotel"],
42
+ [22, 28, "LOCATION", "Hội An"]
43
+ ]
44
+ },
45
+ {
46
+ "text": "Tour du lịch Nha Trang 2 ngày 1 đêm",
47
+ "entities": [
48
+ [4, 10, "SERVICE", "tour"],
49
+ [14, 21, "LOCATION", "Nha Trang"]
50
+ ]
51
+ },
52
+ {
53
+ "text": "Vé máy bay đi Bangkok",
54
+ "entities": [
55
+ [4, 13, "SERVICE", "flight"],
56
+ [17, 24, "LOCATION", "Bangkok"]
57
+ ]
58
+ },
59
+ {
60
+ "text": "Thuê xe máy ở Phú Quốc",
61
+ "entities": [
62
+ [6, 15, "SERVICE", "car rental"],
63
+ [20, 29, "LOCATION", "Phú Quốc"]
64
+ ]
65
+ },
66
+ {
67
+ "text": "Vé tham quan Vườn Quốc gia Cúc Phương",
68
+ "entities": [
69
+ [4, 12, "SERVICE", "ticket"],
70
+ [16, 37, "LOCATION", "Cúc Phương"]
71
+ ]
72
+ },
73
+ {
74
+ "text": "Khách sạn 3 sao ở Huế",
75
+ "entities": [
76
+ [10, 17, "SERVICE", "hotel"],
77
+ [22, 25, "LOCATION", "Huế"]
78
+ ]
79
+ },
80
+ {
81
+ "text": "Tour du lịch Cần Thơ 3 ngày 2 đêm",
82
+ "entities": [
83
+ [4, 10, "SERVICE", "tour"],
84
+ [14, 21, "LOCATION", "Cần Thơ"]
85
+ ]
86
+ },
87
+ {
88
+ "text": "Vé máy bay đi Đà Nẵng",
89
+ "entities": [
90
+ [4, 13, "SERVICE", "flight"],
91
+ [17, 25, "LOCATION", "Đà Nẵng"]
92
+ ]
93
+ },
94
+ {
95
+ "text": "Thuê xe hơi ở Quy Nhơn",
96
+ "entities": [
97
+ [6, 15, "SERVICE", "car rental"],
98
+ [20, 28, "LOCATION", "Quy Nhơn"]
99
+ ]
100
+ },
101
+ {
102
+ "text": "Vé tham quan Chùa Thiên Mụ",
103
+ "entities": [
104
+ [4, 12, "SERVICE", "ticket"],
105
+ [16, 27, "LOCATION", "Thiên Mụ"]
106
+ ]
107
+ },
108
+ {
109
+ "text": "Khách sạn gần biển ở Phan Thiết",
110
+ "entities": [
111
+ [10, 17, "SERVICE", "hotel"],
112
+ [22, 31, "LOCATION", "Phan Thiết"]
113
+ ]
114
+ },
115
+ {
116
+ "text": "Tour du lịch Mũi Né 5 ngày 4 đêm",
117
+ "entities": [
118
+ [4, 10, "SERVICE", "tour"],
119
+ [14, 20, "LOCATION", "Mũi Né"]
120
+ ]
121
+ },
122
+ {
123
+ "text": "Vé máy bay đi Nha Trang",
124
+ "entities": [
125
+ [4, 13, "SERVICE", "flight"],
126
+ [17, 25, "LOCATION", "Nha Trang"]
127
+ ]
128
+ },
129
+ {
130
+ "text": "Thuê xe máy ở Vũng Tàu",
131
+ "entities": [
132
+ [6, 15, "SERVICE", "car rental"],
133
+ [20, 29, "LOCATION", "Vũng Tàu"]
134
+ ]
135
+ },
136
+ {
137
+ "text": "Vé tham quan Lăng Bác",
138
+ "entities": [
139
+ [4, 12, "SERVICE", "ticket"],
140
+ [16, 23, "LOCATION", "Lăng Bác"]
141
+ ]
142
+ },
143
+ {
144
+ "text": "Khách sạn 4 sao ở Sài Gòn",
145
+ "entities": [
146
+ [10, 17, "SERVICE", "hotel"],
147
+ [22, 28, "LOCATION", "Sài Gòn"]
148
+ ]
149
+ },
150
+ {
151
+ "text": "Tour du lịch Ninh Bình 2 ngày 1 đêm",
152
+ "entities": [
153
+ [4, 10, "SERVICE", "tour"],
154
+ [14, 22, "LOCATION", "Ninh Bình"]
155
+ ]
156
+ },
157
+ {
158
+ "text": "Vé máy bay đi Quảng Ninh",
159
+ "entities": [
160
+ [4, 13, "SERVICE", "flight"],
161
+ [17, 28, "LOCATION", "Quảng Ninh"]
162
+ ]
163
+ },
164
+ {
165
+ "text": "Thuê xe hơi ở Hà Nội",
166
+ "entities": [
167
+ [6, 15, "SERVICE", "car rental"],
168
+ [20, 26, "LOCATION", "Hà Nội"]
169
+ ]
170
+ },
171
+ {
172
+ "text": "Vé tham quan Hồ Ba Bể",
173
+ "entities": [
174
+ [4, 12, "SERVICE", "ticket"],
175
+ [16, 25, "LOCATION", "Ba Bể"]
176
+ ]
177
+ },
178
+ {
179
+ "text": "Khách sạn gần Hồ Hoàn Kiếm ở Hà Nội",
180
+ "entities": [
181
+ [10, 17, "SERVICE", "hotel"],
182
+ [22, 28, "LOCATION", "Hà Nội"]
183
+ ]
184
+ },
185
+ {
186
+ "text": "Tour du lịch Phú Quốc 6 ngày 5 đêm",
187
+ "entities": [
188
+ [4, 10, "SERVICE", "tour"],
189
+ [14, 23, "LOCATION", "Phú Quốc"]
190
+ ]
191
+ },
192
+ {
193
+ "text": "Vé máy bay đi Côn Đảo",
194
+ "entities": [
195
+ [4, 13, "SERVICE", "flight"],
196
+ [17, 25, "LOCATION", "Côn Đảo"]
197
+ ]
198
+ },
199
+ {
200
+ "text": "Thuê xe máy ở Đà Lạt",
201
+ "entities": [
202
+ [6, 15, "SERVICE", "car rental"],
203
+ [20, 27, "LOCATION", "Đà Lạt"]
204
+ ]
205
+ },
206
+ {
207
+ "text": "Vé tham quan Vịnh Lan Hạ",
208
+ "entities": [
209
+ [4, 12, "SERVICE", "ticket"],
210
+ [16, 26, "LOCATION", "Lan Hạ"]
211
+ ]
212
+ },
213
+ {
214
+ "text": "Khách sạn gần sân bay ở Đà Nẵng",
215
+ "entities": [
216
+ [10, 17, "SERVICE", "hotel"],
217
+ [22, 28, "LOCATION", "Đà Nẵng"]
218
+ ]
219
+ },
220
+ {
221
+ "text": "Tour du lịch Hạ Long 4 ngày 3 đêm",
222
+ "entities": [
223
+ [4, 10, "SERVICE", "tour"],
224
+ [14, 21, "LOCATION", "Hạ Long"]
225
+ ]
226
+ },
227
+ {
228
+ "text": "Vé máy bay đi Huế",
229
+ "entities": [
230
+ [4, 13, "SERVICE", "flight"],
231
+ [17, 20, "LOCATION", "Huế"]
232
+ ]
233
+ },
234
+ {
235
+ "text": "Thuê xe hơi ở Nha Trang",
236
+ "entities": [
237
+ [6, 15, "SERVICE", "car rental"],
238
+ [20, 28, "LOCATION", "Nha Trang"]
239
+ ]
240
+ },
241
+ {
242
+ "text": "Vé tham quan Di tích Mỹ Sơn",
243
+ "entities": [
244
+ [4, 12, "SERVICE", "ticket"],
245
+ [16, 29, "LOCATION", "Mỹ Sơn"]
246
+ ]
247
+ },
248
+ {
249
+ "text": "Khách sạn gần biển ở Phú Quốc",
250
+ "entities": [
251
+ [10, 17, "SERVICE", "hotel"],
252
+ [22, 31, "LOCATION", "Phú Quốc"]
253
+ ]
254
+ },
255
+ {
256
+ "text": "Tour du lịch Cần Thơ 4 ngày 3 đêm",
257
+ "entities": [
258
+ [4, 10, "SERVICE", "tour"],
259
+ [14, 21, "LOCATION", "Cần Thơ"]
260
+ ]
261
+ },
262
+ {
263
+ "text": "Vé máy bay đi Vũng Tàu",
264
+ "entities": [
265
+ [4, 13, "SERVICE", "flight"],
266
+ [17, 26, "LOCATION", "Vũng Tàu"]
267
+ ]
268
+ },
269
+ {
270
+ "text": "Thuê xe máy ở Quy Nhơn",
271
+ "entities": [
272
+ [6, 15, "SERVICE", "car rental"],
273
+ [20, 28, "LOCATION", "Quy Nhơn"]
274
+ ]
275
+ },
276
+ {
277
+ "text": "Vé tham quan Vườn Quốc gia Phong Nha - Kẻ Bàng",
278
+ "entities": [
279
+ [4, 12, "SERVICE", "ticket"],
280
+ [16, 39, "LOCATION", "Phong Nha"]
281
+ ]
282
+ },
283
+ {
284
+ "text": "Hotels near the beach in Barcelona",
285
+ "entities": [
286
+ [0, 6, "SERVICE", "hotel"],
287
+ [26, 35, "LOCATION", "Barcelona"]
288
+ ]
289
+ },
290
+ {
291
+ "text": "Flights to Rome for a weekend",
292
+ "entities": [
293
+ [0, 7, "SERVICE", "flight"],
294
+ [11, 15, "LOCATION", "Rome"]
295
+ ]
296
+ },
297
+ {
298
+ "text": "Car rental in Berlin for 5 days",
299
+ "entities": [
300
+ [4, 13, "SERVICE", "car rental"],
301
+ [17, 23, "LOCATION", "Berlin"]
302
+ ]
303
+ },
304
+ {
305
+ "text": "Tours in Amsterdam in April",
306
+ "entities": [
307
+ [0, 5, "SERVICE", "tour"],
308
+ [10, 18, "LOCATION", "Amsterdam"]
309
+ ]
310
+ },
311
+ {
312
+ "text": "Tickets to the Eiffel Tower",
313
+ "entities": [
314
+ [0, 7, "SERVICE", "ticket"],
315
+ [14, 26, "LOCATION", "Tower"]
316
+ ]
317
+ },
318
+ {
319
+ "text": "Budget hotels in New York",
320
+ "entities": [
321
+ [5, 11, "SERVICE", "hotel"],
322
+ [15, 21, "LOCATION", "York"]
323
+ ]
324
+ },
325
+ {
326
+ "text": "Flights from London to Tokyo",
327
+ "entities": [
328
+ [0, 7, "SERVICE", "flight"],
329
+ [12, 18, "LOCATION", "London"],
330
+ [23, 28, "LOCATION", "Tokyo"]
331
+ ]
332
+ },
333
+ {
334
+ "text": "Car rental in Madrid for a week",
335
+ "entities": [
336
+ [4, 13, "SERVICE", "car rental"],
337
+ [17, 23, "LOCATION", "Madrid"]
338
+ ]
339
+ },
340
+ {
341
+ "text": "Tours in Vienna next week",
342
+ "entities": [
343
+ [0, 5, "SERVICE", "tour"],
344
+ [10, 15, "LOCATION", "Vienna"]
345
+ ]
346
+ },
347
+ {
348
+ "text": "Tìm khách sạn gần Hồ Tây ở Hà Nội",
349
+ "entities": [
350
+ [4, 11, "SERVICE", "hotel"],
351
+ [22, 28, "LOCATION", "Hà Nội"]
352
+ ]
353
+ },
354
+ {
355
+ "text": "Vé máy bay đi Seoul",
356
+ "entities": [
357
+ [4, 13, "SERVICE", "flight"],
358
+ [17, 21, "LOCATION", "Seoul"]
359
+ ]
360
+ },
361
+ {
362
+ "text": "Tour du lịch Đà Nẵng 5 ngày 4 đêm",
363
+ "entities": [
364
+ [4, 10, "SERVICE", "tour"],
365
+ [14, 21, "LOCATION", "Đà Nẵng"]
366
+ ]
367
+ },
368
+ {
369
+ "text": "Thuê xe ô tô ở Sài Gòn",
370
+ "entities": [
371
+ [6, 15, "SERVICE", "car rental"],
372
+ [20, 28, "LOCATION", "Sài Gòn"]
373
+ ]
374
+ },
375
+ {
376
+ "text": "Vé tham quan Núi Bà Đen",
377
+ "entities": [
378
+ [4, 12, "SERVICE", "ticket"],
379
+ [16, 27, "LOCATION", "Bà Đen"]
380
+ ]
381
+ },
382
+ {
383
+ "text": "Khách sạn gần biển ở Vũng Tàu",
384
+ "entities": [
385
+ [10, 17, "SERVICE", "hotel"],
386
+ [22, 29, "LOCATION", "Vũng Tàu"]
387
+ ]
388
+ },
389
+ {
390
+ "text": "Tour du lịch Huế 4 ngày 3 đêm",
391
+ "entities": [
392
+ [4, 10, "SERVICE", "tour"],
393
+ [14, 18, "LOCATION", "Huế"]
394
+ ]
395
+ },
396
+ {
397
+ "text": "Vé máy bay đi Tokyo",
398
+ "entities": [
399
+ [4, 13, "SERVICE", "flight"],
400
+ [17, 22, "LOCATION", "Tokyo"]
401
+ ]
402
+ },
403
+ {
404
+ "text": "Thuê xe máy ở Đà Lạt",
405
+ "entities": [
406
+ [6, 15, "SERVICE", "car rental"],
407
+ [20, 27, "LOCATION", "Đà Lạt"]
408
+ ]
409
+ },
410
+ {
411
+ "text": "Vé tham quan Cù Lao Câu",
412
+ "entities": [
413
+ [4, 12, "SERVICE", "ticket"],
414
+ [16, 27, "LOCATION", "Cù Lao Câu"]
415
+ ]
416
+ },
417
+ {
418
+ "text": "Khách sạn 5 sao ở Hạ Long",
419
+ "entities": [
420
+ [10, 17, "SERVICE", "hotel"],
421
+ [22, 28, "LOCATION", "Hạ Long"]
422
+ ]
423
+ },
424
+ {
425
+ "text": "Tour du lịch Sa Pa 3 ngày 2 đêm",
426
+ "entities": [
427
+ [4, 10, "SERVICE", "tour"],
428
+ [14, 18, "LOCATION", "Sa Pa"]
429
+ ]
430
+ },
431
+ {
432
+ "text": "Vé máy bay đi Paris",
433
+ "entities": [
434
+ [4, 13, "SERVICE", "flight"],
435
+ [17, 21, "LOCATION", "Paris"]
436
+ ]
437
+ },
438
+ {
439
+ "text": "Thuê xe hơi ở Nha Trang",
440
+ "entities": [
441
+ [6, 15, "SERVICE", "car rental"],
442
+ [20, 28, "LOCATION", "Nha Trang"]
443
+ ]
444
+ },
445
+ {
446
+ "text": "Vé tham quan Chùa Bái Đính",
447
+ "entities": [
448
+ [4, 12, "SERVICE", "ticket"],
449
+ [16, 28, "LOCATION", "Bái Đính"]
450
+ ]
451
+ },
452
+ {
453
+ "text": "Khách sạn gần biển ở Nha Trang",
454
+ "entities": [
455
+ [10, 17, "SERVICE", "hotel"],
456
+ [22, 29, "LOCATION", "Nha Trang"]
457
+ ]
458
+ },
459
+ {
460
+ "text": "Tour du lịch Mũi Né 4 ngày 3 đêm",
461
+ "entities": [
462
+ [4, 10, "SERVICE", "tour"],
463
+ [14, 20, "LOCATION", "Mũi Né"]
464
+ ]
465
+ },
466
+ {
467
+ "text": "Vé máy bay đi Singapore",
468
+ "entities": [
469
+ [4, 13, "SERVICE", "flight"],
470
+ [17, 26, "LOCATION", "Singapore"]
471
+ ]
472
+ },
473
+ {
474
+ "text": "Thuê xe máy ở Hội An",
475
+ "entities": [
476
+ [6, 15, "SERVICE", "car rental"],
477
+ [20, 26, "LOCATION", "Hội An"]
478
+ ]
479
+ },
480
+ {
481
+ "text": "Vé tham quan Thác Dambri",
482
+ "entities": [
483
+ [4, 12, "SERVICE", "ticket"],
484
+ [16, 25, "LOCATION", "Dambri"]
485
+ ]
486
+ },
487
+ {
488
+ "text": "Khách sạn gần trung tâm ở Đà Nẵng",
489
+ "entities": [
490
+ [10, 17, "SERVICE", "hotel"],
491
+ [22, 28, "LOCATION", "Đà Nẵng"]
492
+ ]
493
+ },
494
+ {
495
+ "text": "Tour du lịch Ninh Bình 3 ngày 2 đêm",
496
+ "entities": [
497
+ [4, 10, "SERVICE", "tour"],
498
+ [14, 22, "LOCATION", "Ninh Bình"]
499
+ ]
500
+ },
501
+ {
502
+ "text": "Vé máy bay đi Quy Nhơn",
503
+ "entities": [
504
+ [4, 13, "SERVICE", "flight"],
505
+ [17, 26, "LOCATION", "Quy Nhơn"]
506
+ ]
507
+ },
508
+ {
509
+ "text": "Thuê xe hơi ở Hà Nội",
510
+ "entities": [
511
+ [6, 15, "SERVICE", "car rental"],
512
+ [20, 26, "LOCATION", "Hà Nội"]
513
+ ]
514
+ },
515
+ {
516
+ "text": "Vé tham quan Suối Nước Nóng",
517
+ "entities": [
518
+ [4, 12, "SERVICE", "ticket"],
519
+ [16, 28, "LOCATION", "Nước Nóng"]
520
+ ]
521
+ },
522
+ {
523
+ "text": "Khách sạn gần sông Hàn ở Đà Nẵng",
524
+ "entities": [
525
+ [10, 17, "SERVICE", "hotel"],
526
+ [22, 28, "LOCATION", "Đà Nẵng"]
527
+ ]
528
+ },
529
+ {
530
+ "text": "Tour du lịch Phú Quốc 7 ngày 6 đêm",
531
+ "entities": [
532
+ [4, 10, "SERVICE", "tour"],
533
+ [14, 23, "LOCATION", "Phú Quốc"]
534
+ ]
535
+ },
536
+ {
537
+ "text": "Vé máy bay đi Côn Đảo",
538
+ "entities": [
539
+ [4, 13, "SERVICE", "flight"],
540
+ [17, 25, "LOCATION", "Côn Đảo"]
541
+ ]
542
+ },
543
+ {
544
+ "text": "Thuê xe máy ở Vũng Tàu",
545
+ "entities": [
546
+ [6, 15, "SERVICE", "car rental"],
547
+ [20, 29, "LOCATION", "Vũng Tàu"]
548
+ ]
549
+ },
550
+ {
551
+ "text": "Vé tham quan Núi Chúa",
552
+ "entities": [
553
+ [4, 12, "SERVICE", "ticket"],
554
+ [16, 24, "LOCATION", "Chúa"]
555
+ ]
556
+ },
557
+ {
558
+ "text": "Khách sạn gần sân bay ở Sài Gòn",
559
+ "entities": [
560
+ [10, 17, "SERVICE", "hotel"],
561
+ [22, 28, "LOCATION", "Sài Gòn"]
562
+ ]
563
+ },
564
+ {
565
+ "text": "Tour du lịch Hạ Long 5 ngày 4 đêm",
566
+ "entities": [
567
+ [4, 10, "SERVICE", "tour"],
568
+ [14, 21, "LOCATION", "Hạ Long"]
569
+ ]
570
+ },
571
+ {
572
+ "text": "Vé máy bay đi Huế",
573
+ "entities": [
574
+ [4, 13, "SERVICE", "flight"],
575
+ [17, 20, "LOCATION", "Huế"]
576
+ ]
577
+ },
578
+ {
579
+ "text": "Thuê xe hơi ở Nha Trang",
580
+ "entities": [
581
+ [6, 15, "SERVICE", "car rental"],
582
+ [20, 28, "LOCATION", "Nha Trang"]
583
+ ]
584
+ },
585
+ {
586
+ "text": "Vé tham quan Vườn Quốc gia Phong Nha - Kẻ Bàng",
587
+ "entities": [
588
+ [4, 12, "SERVICE", "ticket"],
589
+ [16, 39, "LOCATION", "Phong Nha"]
590
+ ]
591
+ },
592
+ {
593
+ "text": "Hotels near the beach in Lisbon",
594
+ "entities": [
595
+ [0, 6, "SERVICE", "hotel"],
596
+ [26, 32, "LOCATION", "Lisbon"]
597
+ ]
598
+ },
599
+ {
600
+ "text": "Flights to Berlin for a long weekend",
601
+ "entities": [
602
+ [0, 7, "SERVICE", "flight"],
603
+ [11, 17, "LOCATION", "Berlin"]
604
+ ]
605
+ },
606
+ {
607
+ "text": "Car rental in Prague for 3 days",
608
+ "entities": [
609
+ [4, 13, "SERVICE", "car rental"],
610
+ [17, 22, "LOCATION", "Prague"]
611
+ ]
612
+ },
613
+ {
614
+ "text": "Tours in Venice in August",
615
+ "entities": [
616
+ [0, 5, "SERVICE", "tour"],
617
+ [10, 16, "LOCATION", "Venice"]
618
+ ]
619
+ },
620
+ {
621
+ "text": "Tickets to the Colosseum",
622
+ "entities": [
623
+ [0, 7, "SERVICE", "ticket"],
624
+ [14, 23, "LOCATION", "Colosseum"]
625
+ ]
626
+ },
627
+ {
628
+ "text": "Luxury hotels in Singapore",
629
+ "entities": [
630
+ [5, 11, "SERVICE", "hotel"],
631
+ [15, 24, "LOCATION", "Singapore"]
632
+ ]
633
+ },
634
+ {
635
+ "text": "Flights from Paris to London",
636
+ "entities": [
637
+ [0, 7, "SERVICE", "flight"],
638
+ [12, 17, "LOCATION", "Paris"],
639
+ [22, 28, "LOCATION", "London"]
640
+ ]
641
+ },
642
+ {
643
+ "text": "Car rental in Amsterdam for a week",
644
+ "entities": [
645
+ [4, 13, "SERVICE", "car rental"],
646
+ [17, 25, "LOCATION", "Amsterdam"]
647
+ ]
648
+ },
649
+ {
650
+ "text": "Tours in Rome next month",
651
+ "entities": [
652
+ [0, 5, "SERVICE", "tour"],
653
+ [10, 14, "LOCATION", "Rome"]
654
+ ]
655
+ },
656
+ {
657
+ "text": "Khách sạn gần phố cổ ở Hội An",
658
+ "entities": [
659
+ [10, 17, "SERVICE", "hotel"],
660
+ [22, 28, "LOCATION", "Hội An"]
661
+ ]
662
+ },
663
+ {
664
+ "text": "Vé máy bay đi Dubai",
665
+ "entities": [
666
+ [4, 13, "SERVICE", "flight"],
667
+ [17, 21, "LOCATION", "Dubai"]
668
+ ]
669
+ },
670
+ {
671
+ "text": "Tour du lịch Đà Lạt 6 ngày 5 đêm",
672
+ "entities": [
673
+ [4, 10, "SERVICE", "tour"],
674
+ [14, 21, "LOCATION", "Đà Lạt"]
675
+ ]
676
+ },
677
+ {
678
+ "text": "Thuê xe ô tô ở Hà Nội",
679
+ "entities": [
680
+ [6, 15, "SERVICE", "car rental"],
681
+ [20, 26, "LOCATION", "Hà Nội"]
682
+ ]
683
+ },
684
+ {
685
+ "text": "Vé tham quan Biển Hồ Tà Đùng",
686
+ "entities": [
687
+ [4, 12, "SERVICE", "ticket"],
688
+ [16, 31, "LOCATION", "Tà Đùng"]
689
+ ]
690
+ },
691
+ {
692
+ "text": "Khách sạn gần biển ở Phú Quốc",
693
+ "entities": [
694
+ [10, 17, "SERVICE", "hotel"],
695
+ [22, 31, "LOCATION", "Phú Quốc"]
696
+ ]
697
+ },
698
+ {
699
+ "text": "Tour du lịch Huế 5 ngày 4 đêm",
700
+ "entities": [
701
+ [4, 10, "SERVICE", "tour"],
702
+ [14, 18, "LOCATION", "Huế"]
703
+ ]
704
+ },
705
+ {
706
+ "text": "Vé máy bay đi New York",
707
+ "entities": [
708
+ [4, 13, "SERVICE", "flight"],
709
+ [17, 24, "LOCATION", "York"]
710
+ ]
711
+ },
712
+ {
713
+ "text": "Thuê xe máy ở Đà Lạt",
714
+ "entities": [
715
+ [6, 15, "SERVICE", "car rental"],
716
+ [20, 27, "LOCATION", "Đà Lạt"]
717
+ ]
718
+ },
719
+ {
720
+ "text": "Vé tham quan Vườn Quốc gia Cúc Phương",
721
+ "entities": [
722
+ [4, 12, "SERVICE", "ticket"],
723
+ [16, 37, "LOCATION", "Cúc Phương"]
724
+ ]
725
+ },
726
+ {
727
+ "text": "Khách sạn 4 sao ở Nha Trang",
728
+ "entities": [
729
+ [10, 17, "SERVICE", "hotel"],
730
+ [22, 29, "LOCATION", "Nha Trang"]
731
+ ]
732
+ },
733
+ {
734
+ "text": "Tour du lịch Sa Pa 4 ngày 3 đêm",
735
+ "entities": [
736
+ [4, 10, "SERVICE", "tour"],
737
+ [14, 18, "LOCATION", "Sa Pa"]
738
+ ]
739
+ },
740
+ {
741
+ "text": "Vé máy bay đi London",
742
+ "entities": [
743
+ [4, 13, "SERVICE", "flight"],
744
+ [17, 23, "LOCATION", "London"]
745
+ ]
746
+ },
747
+ {
748
+ "text": "Thuê xe hơi ở Quy Nhơn",
749
+ "entities": [
750
+ [6, 15, "SERVICE", "car rental"],
751
+ [20, 28, "LOCATION", "Quy Nhơn"]
752
+ ]
753
+ },
754
+ {
755
+ "text": "Vé tham quan Chùa Thiên Mụ",
756
+ "entities": [
757
+ [4, 12, "SERVICE", "ticket"],
758
+ [16, 27, "LOCATION", "Thiên Mụ"]
759
+ ]
760
+ },
761
+ {
762
+ "text": "Khách sạn gần biển ở Phan Thiết",
763
+ "entities": [
764
+ [10, 17, "SERVICE", "hotel"],
765
+ [22, 31, "LOCATION", "Phan Thiết"]
766
+ ]
767
+ },
768
+ {
769
+ "text": "Tour du lịch Mũi Né 5 ngày 4 đêm",
770
+ "entities": [
771
+ [4, 10, "SERVICE", "tour"],
772
+ [14, 20, "LOCATION", "Mũi Né"]
773
+ ]
774
+ },
775
+ {
776
+ "text": "Vé máy bay đi Bangkok",
777
+ "entities": [
778
+ [4, 13, "SERVICE", "flight"],
779
+ [17, 24, "LOCATION", "Bangkok"]
780
+ ]
781
+ },
782
+ {
783
+ "text": "Thuê xe máy ở Vũng Tàu",
784
+ "entities": [
785
+ [6, 15, "SERVICE", "car rental"],
786
+ [20, 29, "LOCATION", "Vũng Tàu"]
787
+ ]
788
+ },
789
+ {
790
+ "text": "Vé tham quan Lăng Bác",
791
+ "entities": [
792
+ [4, 12, "SERVICE", "ticket"],
793
+ [16, 23, "LOCATION", "Lăng Bác"]
794
+ ]
795
+ },
796
+ {
797
+ "text": "Khách sạn 5 sao ở Sài Gòn",
798
+ "entities": [
799
+ [10, 17, "SERVICE", "hotel"],
800
+ [22, 28, "LOCATION", "Sài Gòn"]
801
+ ]
802
+ },
803
+ {
804
+ "text": "Tour du lịch Ninh Bình 4 ngày 3 đêm",
805
+ "entities": [
806
+ [4, 10, "SERVICE", "tour"],
807
+ [14, 22, "LOCATION", "Ninh Bình"]
808
+ ]
809
+ },
810
+ {
811
+ "text": "Vé máy bay đi Quảng Ninh",
812
+ "entities": [
813
+ [4, 13, "SERVICE", "flight"],
814
+ [17, 28, "LOCATION", "Quảng Ninh"]
815
+ ]
816
+ },
817
+ {
818
+ "text": "Thuê xe hơi ở Hà Nội",
819
+ "entities": [
820
+ [6, 15, "SERVICE", "car rental"],
821
+ [20, 26, "LOCATION", "Hà Nội"]
822
+ ]
823
+ },
824
+ {
825
+ "text": "Vé tham quan Hồ Ba Bể",
826
+ "entities": [
827
+ [4, 12, "SERVICE", "ticket"],
828
+ [16, 25, "LOCATION", "Ba Bể"]
829
+ ]
830
+ },
831
+ {
832
+ "text": "Khách sạn gần Hồ Hoàn Kiếm ở Hà Nội",
833
+ "entities": [
834
+ [10, 17, "SERVICE", "hotel"],
835
+ [22, 28, "LOCATION", "Hà Nội"]
836
+ ]
837
+ },
838
+ {
839
+ "text": "Tour du lịch Phú Quốc 8 ngày 7 đêm",
840
+ "entities": [
841
+ [4, 10, "SERVICE", "tour"],
842
+ [14, 23, "LOCATION", "Phú Quốc"]
843
+ ]
844
+ },
845
+ {
846
+ "text": "Vé máy bay đi Côn Đảo",
847
+ "entities": [
848
+ [4, 13, "SERVICE", "flight"],
849
+ [17, 25, "LOCATION", "Côn Đảo"]
850
+ ]
851
+ },
852
+ {
853
+ "text": "Thuê xe máy ở Đà Lạt",
854
+ "entities": [
855
+ [6, 15, "SERVICE", "car rental"],
856
+ [20, 27, "LOCATION", "Đà Lạt"]
857
+ ]
858
+ },
859
+ {
860
+ "text": "Vé tham quan Vịnh Lan Hạ",
861
+ "entities": [
862
+ [4, 12, "SERVICE", "ticket"],
863
+ [16, 26, "LOCATION", "Lan Hạ"]
864
+ ]
865
+ },
866
+ {
867
+ "text": "Khách sạn gần sân bay ở Sài Gòn",
868
+ "entities": [
869
+ [10, 17, "SERVICE", "hotel"],
870
+ [22, 28, "LOCATION", "Sài Gòn"]
871
+ ]
872
+ },
873
+ {
874
+ "text": "Tour du lịch Hạ Long 6 ngày 5 đêm",
875
+ "entities": [
876
+ [4, 10, "SERVICE", "tour"],
877
+ [14, 21, "LOCATION", "Hạ Long"]
878
+ ]
879
+ },
880
+ {
881
+ "text": "Vé máy bay đi Huế",
882
+ "entities": [
883
+ [4, 13, "SERVICE", "flight"],
884
+ [17, 20, "LOCATION", "Huế"]
885
+ ]
886
+ },
887
+ {
888
+ "text": "Thuê xe hơi ở Nha Trang",
889
+ "entities": [
890
+ [6, 15, "SERVICE", "car rental"],
891
+ [20, 28, "LOCATION", "Nha Trang"]
892
+ ]
893
+ },
894
+ {
895
+ "text": "Vé tham quan Di tích Mỹ Sơn",
896
+ "entities": [
897
+ [4, 12, "SERVICE", "ticket"],
898
+ [16, 29, "LOCATION", "Mỹ Sơn"]
899
+ ]
900
+ },
901
+ {
902
+ "text": "Khách sạn gần biển ở Phú Quốc",
903
+ "entities": [
904
+ [10, 17, "SERVICE", "hotel"],
905
+ [22, 31, "LOCATION", "Phú Quốc"]
906
+ ]
907
+ },
908
+ {
909
+ "text": "Tour du lịch Cần Thơ 5 ngày 4 đêm",
910
+ "entities": [
911
+ [4, 10, "SERVICE", "tour"],
912
+ [14, 21, "LOCATION", "Cần Thơ"]
913
+ ]
914
+ },
915
+ {
916
+ "text": "Vé máy bay đi Vũng Tàu",
917
+ "entities": [
918
+ [4, 13, "SERVICE", "flight"],
919
+ [17, 26, "LOCATION", "Vũng Tàu"]
920
+ ]
921
+ },
922
+ {
923
+ "text": "Thuê xe máy ở Quy Nhơn",
924
+ "entities": [
925
+ [6, 15, "SERVICE", "car rental"],
926
+ [20, 28, "LOCATION", "Quy Nhơn"]
927
+ ]
928
+ },
929
+ {
930
+ "text": "Vé tham quan Vườn Quốc gia Phong Nha - Kẻ Bàng",
931
+ "entities": [
932
+ [4, 12, "SERVICE", "ticket"],
933
+ [16, 39, "LOCATION", "Phong Nha"]
934
+ ]
935
+ },
936
+ {
937
+ "text": "Hotels near the airport in Vienna",
938
+ "entities": [
939
+ [0, 6, "SERVICE", "hotel"],
940
+ [26, 32, "LOCATION", "Vienna"]
941
+ ]
942
+ },
943
+ {
944
+ "text": "Flights to Prague for a weekend getaway",
945
+ "entities": [
946
+ [0, 7, "SERVICE", "flight"],
947
+ [11, 17, "LOCATION", "Prague"]
948
+ ]
949
+ },
950
+ {
951
+ "text": "Car rental in Budapest for 4 days",
952
+ "entities": [
953
+ [4, 13, "SERVICE", "car rental"],
954
+ [17, 24, "LOCATION", "Budapest"]
955
+ ]
956
+ },
957
+ {
958
+ "text": "Tours in Madrid in June",
959
+ "entities": [
960
+ [0, 5, "SERVICE", "tour"],
961
+ [10, 16, "LOCATION", "Madrid"]
962
+ ]
963
+ },
964
+ {
965
+ "text": "Tickets to the Trevi Fountain",
966
+ "entities": [
967
+ [0, 7, "SERVICE", "ticket"],
968
+ [14, 27, "LOCATION", "Fountain"]
969
+ ]
970
+ },
971
+ {
972
+ "text": "Budget hotels in London",
973
+ "entities": [
974
+ [5, 11, "SERVICE", "hotel"],
975
+ [15, 21, "LOCATION", "London"]
976
+ ]
977
+ },
978
+ {
979
+ "text": "Flights from Amsterdam to Rome",
980
+ "entities": [
981
+ [0, 7, "SERVICE", "flight"],
982
+ [12, 20, "LOCATION", "Amsterdam"],
983
+ [24, 28, "LOCATION", "Rome"]
984
+ ]
985
+ },
986
+ {
987
+ "text": "Car rental in Lisbon for a week",
988
+ "entities": [
989
+ [4, 13, "SERVICE", "car rental"],
990
+ [17, 23, "LOCATION", "Lisbon"]
991
+ ]
992
+ },
993
+ {
994
+ "text": "Tours in Paris next month",
995
+ "entities": [
996
+ [0, 5, "SERVICE", "tour"],
997
+ [10, 14, "LOCATION", "Paris"]
998
+ ]
999
+ },
1000
+ {
1001
+ "text": "Khách sạn gần biển ở Nha Trang",
1002
+ "entities": [
1003
+ [10, 17, "SERVICE", "hotel"],
1004
+ [22, 29, "LOCATION", "Nha Trang"]
1005
+ ]
1006
+ },
1007
+ {
1008
+ "text": "Vé máy bay đi Sydney",
1009
+ "entities": [
1010
+ [4, 13, "SERVICE", "flight"],
1011
+ [17, 22, "LOCATION", "Sydney"]
1012
+ ]
1013
+ },
1014
+ {
1015
+ "text": "Tour du lịch Đà Lạt 7 ngày 6 đêm",
1016
+ "entities": [
1017
+ [4, 10, "SERVICE", "tour"],
1018
+ [14, 21, "LOCATION", "Đà Lạt"]
1019
+ ]
1020
+ },
1021
+ {
1022
+ "text": "Thuê xe ô tô ở Sài Gòn",
1023
+ "entities": [
1024
+ [6, 15, "SERVICE", "car rental"],
1025
+ [20, 28, "LOCATION", "Sài Gòn"]
1026
+ ]
1027
+ },
1028
+ {
1029
+ "text": "Vé tham quan Núi Bà Đen",
1030
+ "entities": [
1031
+ [4, 12, "SERVICE", "ticket"],
1032
+ [16, 27, "LOCATION", "Bà Đen"]
1033
+ ]
1034
+ },
1035
+ {
1036
+ "text": "Khách sạn gần biển ở Phú Quốc",
1037
+ "entities": [
1038
+ [10, 17, "SERVICE", "hotel"],
1039
+ [22, 31, "LOCATION", "Phú Quốc"]
1040
+ ]
1041
+ },
1042
+ {
1043
+ "text": "Tour du lịch Huế 6 ngày 5 đêm",
1044
+ "entities": [
1045
+ [4, 10, "SERVICE", "tour"],
1046
+ [14, 18, "LOCATION", "Huế"]
1047
+ ]
1048
+ },
1049
+ {
1050
+ "text": "Vé máy bay đi Berlin",
1051
+ "entities": [
1052
+ [4, 13, "SERVICE", "flight"],
1053
+ [17, 23, "LOCATION", "Berlin"]
1054
+ ]
1055
+ },
1056
+ {
1057
+ "text": "Thuê xe máy ở Đà Lạt",
1058
+ "entities": [
1059
+ [6, 15, "SERVICE", "car rental"],
1060
+ [20, 27, "LOCATION", "Đà Lạt"]
1061
+ ]
1062
+ },
1063
+ {
1064
+ "text": "Vé tham quan Cù Lao Câu",
1065
+ "entities": [
1066
+ [4, 12, "SERVICE", "ticket"],
1067
+ [16, 27, "LOCATION", "Cù Lao Câu"]
1068
+ ]
1069
+ },
1070
+ {
1071
+ "text": "Khách sạn 5 sao ở Hạ Long",
1072
+ "entities": [
1073
+ [10, 17, "SERVICE", "hotel"],
1074
+ [22, 28, "LOCATION", "Hạ Long"]
1075
+ ]
1076
+ },
1077
+ {
1078
+ "text": "Tour du lịch Sa Pa 5 ngày 4 đêm",
1079
+ "entities": [
1080
+ [4, 10, "SERVICE", "tour"],
1081
+ [14, 18, "LOCATION", "Sa Pa"]
1082
+ ]
1083
+ },
1084
+ {
1085
+ "text": "Vé máy bay đi Rome",
1086
+ "entities": [
1087
+ [4, 13, "SERVICE", "flight"],
1088
+ [17, 21, "LOCATION", "Rome"]
1089
+ ]
1090
+ },
1091
+ {
1092
+ "text": "Thuê xe hơi ở Nha Trang",
1093
+ "entities": [
1094
+ [6, 15, "SERVICE", "car rental"],
1095
+ [20, 28, "LOCATION", "Nha Trang"]
1096
+ ]
1097
+ },
1098
+ {
1099
+ "text": "Vé tham quan Chùa Bái Đính",
1100
+ "entities": [
1101
+ [4, 12, "SERVICE", "ticket"],
1102
+ [16, 28, "LOCATION", "Bái Đính"]
1103
+ ]
1104
+ },
1105
+ {
1106
+ "text": "Khách sạn gần biển ở Phan Thiết",
1107
+ "entities": [
1108
+ [10, 17, "SERVICE", "hotel"],
1109
+ [22, 31, "LOCATION", "Phan Thiết"]
1110
+ ]
1111
+ },
1112
+ {
1113
+ "text": "Tour du lịch Mũi Né 6 ngày 5 đêm",
1114
+ "entities": [
1115
+ [4, 10, "SERVICE", "tour"],
1116
+ [14, 20, "LOCATION", "Mũi Né"]
1117
+ ]
1118
+ },
1119
+ {
1120
+ "text": "Vé máy bay đi Amsterdam",
1121
+ "entities": [
1122
+ [4, 13, "SERVICE", "flight"],
1123
+ [17, 25, "LOCATION", "Amsterdam"]
1124
+ ]
1125
+ },
1126
+ {
1127
+ "text": "Thuê xe máy ở Vũng Tàu",
1128
+ "entities": [
1129
+ [6, 15, "SERVICE", "car rental"],
1130
+ [20, 29, "LOCATION", "Vũng Tàu"]
1131
+ ]
1132
+ },
1133
+ {
1134
+ "text": "Vé tham quan Lăng Bác",
1135
+ "entities": [
1136
+ [4, 12, "SERVICE", "ticket"],
1137
+ [16, 23, "LOCATION", "Lăng Bác"]
1138
+ ]
1139
+ },
1140
+ {
1141
+ "text": "Khách sạn 4 sao ở Sài Gòn",
1142
+ "entities": [
1143
+ [10, 17, "SERVICE", "hotel"],
1144
+ [22, 28, "LOCATION", "Sài Gòn"]
1145
+ ]
1146
+ },
1147
+ {
1148
+ "text": "Tour du lịch Ninh Bình 5 ngày 4 đêm",
1149
+ "entities": [
1150
+ [4, 10, "SERVICE", "tour"],
1151
+ [14, 22, "LOCATION", "Ninh Bình"]
1152
+ ]
1153
+ },
1154
+ {
1155
+ "text": "Vé máy bay đi Prague",
1156
+ "entities": [
1157
+ [4, 13, "SERVICE", "flight"],
1158
+ [17, 22, "LOCATION", "Prague"]
1159
+ ]
1160
+ },
1161
+ {
1162
+ "text": "Thuê xe hơi ở Hà Nội",
1163
+ "entities": [
1164
+ [6, 15, "SERVICE", "car rental"],
1165
+ [20, 26, "LOCATION", "Hà Nội"]
1166
+ ]
1167
+ },
1168
+ {
1169
+ "text": "Vé tham quan Suối Nước Nóng",
1170
+ "entities": [
1171
+ [4, 12, "SERVICE", "ticket"],
1172
+ [16, 28, "LOCATION", "Nước Nóng"]
1173
+ ]
1174
+ },
1175
+ {
1176
+ "text": "Khách sạn gần sông Hàn ở Đà Nẵng",
1177
+ "entities": [
1178
+ [10, 17, "SERVICE", "hotel"],
1179
+ [22, 28, "LOCATION", "Đà Nẵng"]
1180
+ ]
1181
+ },
1182
+ {
1183
+ "text": "Tour du lịch Phú Quốc 9 ngày 8 đêm",
1184
+ "entities": [
1185
+ [4, 10, "SERVICE", "tour"],
1186
+ [14, 23, "LOCATION", "Phú Quốc"]
1187
+ ]
1188
+ },
1189
+ {
1190
+ "text": "Vé máy bay đi Côn Đảo",
1191
+ "entities": [
1192
+ [4, 13, "SERVICE", "flight"],
1193
+ [17, 25, "LOCATION", "Côn Đảo"]
1194
+ ]
1195
+ },
1196
+ {
1197
+ "text": "Thuê xe máy ở Đà Lạt",
1198
+ "entities": [
1199
+ [6, 15, "SERVICE", "car rental"],
1200
+ [20, 27, "LOCATION", "Đà Lạt"]
1201
+ ]
1202
+ },
1203
+ {
1204
+ "text": "Vé tham quan Vịnh Lan Hạ",
1205
+ "entities": [
1206
+ [4, 12, "SERVICE", "ticket"],
1207
+ [16, 26, "LOCATION", "Lan Hạ"]
1208
+ ]
1209
+ },
1210
+ {
1211
+ "text": "Khách sạn gần sân bay ở Sài Gòn",
1212
+ "entities": [
1213
+ [10, 17, "SERVICE", "hotel"],
1214
+ [22, 28, "LOCATION", "Sài Gòn"]
1215
+ ]
1216
+ },
1217
+ {
1218
+ "text": "Tour du lịch Hạ Long 7 ngày 6 đêm",
1219
+ "entities": [
1220
+ [4, 10, "SERVICE", "tour"],
1221
+ [14, 21, "LOCATION", "Hạ Long"]
1222
+ ]
1223
+ },
1224
+ {
1225
+ "text": "Vé máy bay đi Huế",
1226
+ "entities": [
1227
+ [4, 13, "SERVICE", "flight"],
1228
+ [17, 20, "LOCATION", "Huế"]
1229
+ ]
1230
+ },
1231
+ {
1232
+ "text": "Thuê xe hơi ở Nha Trang",
1233
+ "entities": [
1234
+ [6, 15, "SERVICE", "car rental"],
1235
+ [20, 28, "LOCATION", "Nha Trang"]
1236
+ ]
1237
+ },
1238
+ {
1239
+ "text": "Vé tham quan Di tích Mỹ Sơn",
1240
+ "entities": [
1241
+ [4, 12, "SERVICE", "ticket"],
1242
+ [16, 29, "LOCATION", "Mỹ Sơn"]
1243
+ ]
1244
+ },
1245
+ {
1246
+ "text": "Khách sạn gần biển ở Phú Quốc",
1247
+ "entities": [
1248
+ [10, 17, "SERVICE", "hotel"],
1249
+ [22, 31, "LOCATION", "Phú Quốc"]
1250
+ ]
1251
+ },
1252
+ {
1253
+ "text": "Tour du lịch Cần Thơ 6 ngày 5 đêm",
1254
+ "entities": [
1255
+ [4, 10, "SERVICE", "tour"],
1256
+ [14, 21, "LOCATION", "Cần Thơ"]
1257
+ ]
1258
+ },
1259
+ {
1260
+ "text": "Vé máy bay đi Vũng Tàu",
1261
+ "entities": [
1262
+ [4, 13, "SERVICE", "flight"],
1263
+ [17, 26, "LOCATION", "Vũng Tàu"]
1264
+ ]
1265
+ },
1266
+ {
1267
+ "text": "Thuê xe máy ở Quy Nhơn",
1268
+ "entities": [
1269
+ [6, 15, "SERVICE", "car rental"],
1270
+ [20, 28, "LOCATION", "Quy Nhơn"]
1271
+ ]
1272
+ },
1273
+ {
1274
+ "text": "Vé tham quan Vườn Quốc gia Phong Nha - Kẻ Bàng",
1275
+ "entities": [
1276
+ [4, 12, "SERVICE", "ticket"],
1277
+ [16, 39, "LOCATION", "Phong Nha"]
1278
+ ]
1279
+ },
1280
+ {
1281
+ "text": "Hotels near the city center in Budapest",
1282
+ "entities": [
1283
+ [0, 6, "SERVICE", "hotel"],
1284
+ [26, 33, "LOCATION", "Budapest"]
1285
+ ]
1286
+ },
1287
+ {
1288
+ "text": "Flights to Lisbon for a romantic getaway",
1289
+ "entities": [
1290
+ [0, 7, "SERVICE", "flight"],
1291
+ [11, 17, "LOCATION", "Lisbon"]
1292
+ ]
1293
+ },
1294
+ {
1295
+ "text": "Car rental in Vienna for 5 days",
1296
+ "entities": [
1297
+ [4, 13, "SERVICE", "car rental"],
1298
+ [17, 23, "LOCATION", "Vienna"]
1299
+ ]
1300
+ },
1301
+ {
1302
+ "text": "Tours in Venice in September",
1303
+ "entities": [
1304
+ [0, 5, "SERVICE", "tour"],
1305
+ [10, 16, "LOCATION", "Venice"]
1306
+ ]
1307
+ },
1308
+ {
1309
+ "text": "Tickets to the Vatican Museums",
1310
+ "entities": [
1311
+ [0, 7, "SERVICE", "ticket"],
1312
+ [14, 28, "LOCATION", "Museums"]
1313
+ ]
1314
+ },
1315
+ {
1316
+ "text": "Budget hotels in Amsterdam",
1317
+ "entities": [
1318
+ [5, 11, "SERVICE", "hotel"],
1319
+ [15, 23, "LOCATION", "Amsterdam"]
1320
+ ]
1321
+ },
1322
+ {
1323
+ "text": "Flights from Rome to Paris",
1324
+ "entities": [
1325
+ [0, 7, "SERVICE", "flight"],
1326
+ [12, 16, "LOCATION", "Rome"],
1327
+ [20, 24, "LOCATION", "Paris"]
1328
+ ]
1329
+ },
1330
+ {
1331
+ "text": "Car rental in Madrid for a week",
1332
+ "entities": [
1333
+ [4, 13, "SERVICE", "car rental"],
1334
+ [17, 23, "LOCATION", "Madrid"]
1335
+ ]
1336
+ },
1337
+ {
1338
+ "text": "Tours in London next month",
1339
+ "entities": [
1340
+ [0, 5, "SERVICE", "tour"],
1341
+ [10, 16, "LOCATION", "London"]
1342
+ ]
1343
+ },
1344
+ {
1345
+ "text": "Khách sạn gần chợ đêm ở Đà Lạt",
1346
+ "entities": [
1347
+ [10, 17, "SERVICE", "hotel"],
1348
+ [22, 28, "LOCATION", "Đà Lạt"]
1349
+ ]
1350
+ },
1351
+ {
1352
+ "text": "Vé máy bay đi Los Angeles",
1353
+ "entities": [
1354
+ [4, 13, "SERVICE", "flight"],
1355
+ [17, 28, "LOCATION", "Los Angeles"]
1356
+ ]
1357
+ },
1358
+ {
1359
+ "text": "Tour du lịch Đà Nẵng 8 ngày 7 đêm",
1360
+ "entities": [
1361
+ [4, 10, "SERVICE", "tour"],
1362
+ [14, 21, "LOCATION", "Đà Nẵng"]
1363
+ ]
1364
+ },
1365
+ {
1366
+ "text": "Thuê xe ô tô ở Sài Gòn",
1367
+ "entities": [
1368
+ [6, 15, "SERVICE", "car rental"],
1369
+ [20, 28, "LOCATION", "Sài Gòn"]
1370
+ ]
1371
+ },
1372
+ {
1373
+ "text": "Vé tham quan Núi Bà Đen",
1374
+ "entities": [
1375
+ [4, 12, "SERVICE", "ticket"],
1376
+ [16, 27, "LOCATION", "Bà Đen"]
1377
+ ]
1378
+ },
1379
+ {
1380
+ "text": "Khách sạn gần biển ở Phú Quốc",
1381
+ "entities": [
1382
+ [10, 17, "SERVICE", "hotel"],
1383
+ [22, 31, "LOCATION", "Phú Quốc"]
1384
+ ]
1385
+ },
1386
+ {
1387
+ "text": "Tour du lịch Huế 7 ngày 6 đêm",
1388
+ "entities": [
1389
+ [4, 10, "SERVICE", "tour"],
1390
+ [14, 18, "LOCATION", "Huế"]
1391
+ ]
1392
+ },
1393
+ {
1394
+ "text": "Vé máy bay đi Chicago",
1395
+ "entities": [
1396
+ [4, 13, "SERVICE", "flight"],
1397
+ [17, 24, "LOCATION", "Chicago"]
1398
+ ]
1399
+ },
1400
+ {
1401
+ "text": "Thuê xe máy ở Đà Lạt",
1402
+ "entities": [
1403
+ [6, 15, "SERVICE", "car rental"],
1404
+ [20, 27, "LOCATION", "Đà Lạt"]
1405
+ ]
1406
+ },
1407
+ {
1408
+ "text": "Vé tham quan Cù Lao Câu",
1409
+ "entities": [
1410
+ [4, 12, "SERVICE", "ticket"],
1411
+ [16, 27, "LOCATION", "Cù Lao Câu"]
1412
+ ]
1413
+ },
1414
+ {
1415
+ "text": "Khách sạn 5 sao ở Hạ Long",
1416
+ "entities": [
1417
+ [10, 17, "SERVICE", "hotel"],
1418
+ [22, 28, "LOCATION", "Hạ Long"]
1419
+ ]
1420
+ },
1421
+ {
1422
+ "text": "Tour du lịch Sa Pa 6 ngày 5 đêm",
1423
+ "entities": [
1424
+ [4, 10, "SERVICE", "tour"],
1425
+ [14, 18, "LOCATION", "Sa Pa"]
1426
+ ]
1427
+ },
1428
+ {
1429
+ "text": "Vé máy bay đi Istanbul",
1430
+ "entities": [
1431
+ [4, 13, "SERVICE", "flight"],
1432
+ [17, 25, "LOCATION", "Istanbul"]
1433
+ ]
1434
+ },
1435
+ {
1436
+ "text": "Thuê xe hơi ở Nha Trang",
1437
+ "entities": [
1438
+ [6, 15, "SERVICE", "car rental"],
1439
+ [20, 28, "LOCATION", "Nha Trang"]
1440
+ ]
1441
+ },
1442
+ {
1443
+ "text": "Vé tham quan Chùa Bái Đính",
1444
+ "entities": [
1445
+ [4, 12, "SERVICE", "ticket"],
1446
+ [16, 28, "LOCATION", "Bái Đính"]
1447
+ ]
1448
+ },
1449
+ {
1450
+ "text": "Khách sạn gần biển ở Phan Thiết",
1451
+ "entities": [
1452
+ [10, 17, "SERVICE", "hotel"],
1453
+ [22, 31, "LOCATION", "Phan Thiết"]
1454
+ ]
1455
+ },
1456
+ {
1457
+ "text": "Tour du lịch Mũi Né 7 ngày 6 đêm",
1458
+ "entities": [
1459
+ [4, 10, "SERVICE", "tour"],
1460
+ [14, 20, "LOCATION", "Mũi Né"]
1461
+ ]
1462
+ },
1463
+ {
1464
+ "text": "Vé máy bay đi Dubai",
1465
+ "entities": [
1466
+ [4, 13, "SERVICE", "flight"],
1467
+ [17, 21, "LOCATION", "Dubai"]
1468
+ ]
1469
+ },
1470
+ {
1471
+ "text": "Thuê xe máy ở Vũng Tàu",
1472
+ "entities": [
1473
+ [6, 15, "SERVICE", "car rental"],
1474
+ [20, 29, "LOCATION", "Vũng Tàu"]
1475
+ ]
1476
+ },
1477
+ {
1478
+ "text": "Vé tham quan Lăng Bác",
1479
+ "entities": [
1480
+ [4, 12, "SERVICE", "ticket"],
1481
+ [16, 23, "LOCATION", "Lăng Bác"]
1482
+ ]
1483
+ },
1484
+ {
1485
+ "text": "Khách sạn 5 sao ở Sài Gòn",
1486
+ "entities": [
1487
+ [10, 17, "SERVICE", "hotel"],
1488
+ [22, 28, "LOCATION", "Sài Gòn"]
1489
+ ]
1490
+ },
1491
+ {
1492
+ "text": "Tour du lịch Ninh Bình 6 ngày 5 đêm",
1493
+ "entities": [
1494
+ [4, 10, "SERVICE", "tour"],
1495
+ [14, 22, "LOCATION", "Ninh Bình"]
1496
+ ]
1497
+ },
1498
+ {
1499
+ "text": "Vé máy bay đi Tokyo",
1500
+ "entities": [
1501
+ [4, 13, "SERVICE", "flight"],
1502
+ [17, 22, "LOCATION", "Tokyo"]
1503
+ ]
1504
+ },
1505
+ {
1506
+ "text": "Thuê xe hơi ở Hà Nội",
1507
+ "entities": [
1508
+ [6, 15, "SERVICE", "car rental"],
1509
+ [20, 26, "LOCATION", "Hà Nội"]
1510
+ ]
1511
+ },
1512
+ {
1513
+ "text": "Vé tham quan Suối Nước Nóng",
1514
+ "entities": [
1515
+ [4, 12, "SERVICE", "ticket"],
1516
+ [16, 28, "LOCATION", "Nước Nóng"]
1517
+ ]
1518
+ },
1519
+ {
1520
+ "text": "Khách sạn gần sông Hàn ở Đà Nẵng",
1521
+ "entities": [
1522
+ [10, 17, "SERVICE", "hotel"],
1523
+ [22, 28, "LOCATION", "Đà Nẵng"]
1524
+ ]
1525
+ },
1526
+ {
1527
+ "text": "Tour du lịch Phú Quốc 10 ngày 9 đêm",
1528
+ "entities": [
1529
+ [4, 10, "SERVICE", "tour"],
1530
+ [14, 23, "LOCATION", "Phú Quốc"]
1531
+ ]
1532
+ },
1533
+ {
1534
+ "text": "Vé máy bay đi Côn Đảo",
1535
+ "entities": [
1536
+ [4, 13, "SERVICE", "flight"],
1537
+ [17, 25, "LOCATION", "Côn Đảo"]
1538
+ ]
1539
+ },
1540
+ {
1541
+ "text": "Thuê xe máy ở Đà Lạt",
1542
+ "entities": [
1543
+ [6, 15, "SERVICE", "car rental"],
1544
+ [20, 27, "LOCATION", "Đà Lạt"]
1545
+ ]
1546
+ },
1547
+ {
1548
+ "text": "Vé tham quan Vịnh Lan Hạ",
1549
+ "entities": [
1550
+ [4, 12, "SERVICE", "ticket"],
1551
+ [16, 26, "LOCATION", "Lan Hạ"]
1552
+ ]
1553
+ },
1554
+ {
1555
+ "text": "Khách sạn gần sân bay ở Sài Gòn",
1556
+ "entities": [
1557
+ [10, 17, "SERVICE", "hotel"],
1558
+ [22, 28, "LOCATION", "Sài Gòn"]
1559
+ ]
1560
+ },
1561
+ {
1562
+ "text": "Tour du lịch Hạ Long 8 ngày 7 đêm",
1563
+ "entities": [
1564
+ [4, 10, "SERVICE", "tour"],
1565
+ [14, 21, "LOCATION", "Hạ Long"]
1566
+ ]
1567
+ },
1568
+ {
1569
+ "text": "Vé máy bay đi Huế",
1570
+ "entities": [
1571
+ [4, 13, "SERVICE", "flight"],
1572
+ [17, 20, "LOCATION", "Huế"]
1573
+ ]
1574
+ },
1575
+ {
1576
+ "text": "Thuê xe hơi ở Nha Trang",
1577
+ "entities": [
1578
+ [6, 15, "SERVICE", "car rental"],
1579
+ [20, 28, "LOCATION", "Nha Trang"]
1580
+ ]
1581
+ },
1582
+ {
1583
+ "text": "Vé tham quan Di tích Mỹ Sơn",
1584
+ "entities": [
1585
+ [4, 12, "SERVICE", "ticket"],
1586
+ [16, 29, "LOCATION", "Mỹ Sơn"]
1587
+ ]
1588
+ },
1589
+ {
1590
+ "text": "Khách sạn gần biển ở Phú Quốc",
1591
+ "entities": [
1592
+ [10, 17, "SERVICE", "hotel"],
1593
+ [22, 31, "LOCATION", "Phú Quốc"]
1594
+ ]
1595
+ },
1596
+ {
1597
+ "text": "Tour du lịch Cần Thơ 7 ngày 6 đêm",
1598
+ "entities": [
1599
+ [4, 10, "SERVICE", "tour"],
1600
+ [14, 21, "LOCATION", "Cần Thơ"]
1601
+ ]
1602
+ },
1603
+ {
1604
+ "text": "Vé máy bay đi Vũng Tàu",
1605
+ "entities": [
1606
+ [4, 13, "SERVICE", "flight"],
1607
+ [17, 26, "LOCATION", "Vũng Tàu"]
1608
+ ]
1609
+ },
1610
+ {
1611
+ "text": "Thuê xe máy ở Quy Nhơn",
1612
+ "entities": [
1613
+ [6, 15, "SERVICE", "car rental"],
1614
+ [20, 28, "LOCATION", "Quy Nhơn"]
1615
+ ]
1616
+ },
1617
+ {
1618
+ "text": "Vé tham quan Vườn Quốc gia Phong Nha - Kẻ Bàng",
1619
+ "entities": [
1620
+ [4, 12, "SERVICE", "ticket"],
1621
+ [16, 39, "LOCATION", "Phong Nha"]
1622
+ ]
1623
+ },
1624
+ {
1625
+ "text": "Hotels near the historical center in Prague",
1626
+ "entities": [
1627
+ [0, 6, "SERVICE", "hotel"],
1628
+ [26, 32, "LOCATION", "Prague"]
1629
+ ]
1630
+ },
1631
+ {
1632
+ "text": "Flights to Istanbul for a weekend trip",
1633
+ "entities": [
1634
+ [0, 7, "SERVICE", "flight"],
1635
+ [11, 19, "LOCATION", "Istanbul"]
1636
+ ]
1637
+ },
1638
+ {
1639
+ "text": "Car rental in Amsterdam for 6 days",
1640
+ "entities": [
1641
+ [4, 13, "SERVICE", "car rental"],
1642
+ [17, 25, "LOCATION", "Amsterdam"]
1643
+ ]
1644
+ },
1645
+ {
1646
+ "text": "Tours in Rome in October",
1647
+ "entities": [
1648
+ [0, 5, "SERVICE", "tour"],
1649
+ [10, 14, "LOCATION", "Rome"]
1650
+ ]
1651
+ },
1652
+ {
1653
+ "text": "Tickets to the Sagrada Familia",
1654
+ "entities": [
1655
+ [0, 7, "SERVICE", "ticket"],
1656
+ [14, 28, "LOCATION", "Familia"]
1657
+ ]
1658
+ },
1659
+ {
1660
+ "text": "Budget hotels in Vienna",
1661
+ "entities": [
1662
+ [5, 11, "SERVICE", "hotel"],
1663
+ [15, 21, "LOCATION", "Vienna"]
1664
+ ]
1665
+ },
1666
+ {
1667
+ "text": "Flights from Paris to London",
1668
+ "entities": [
1669
+ [0, 7, "SERVICE", "flight"],
1670
+ [12, 17, "LOCATION", "Paris"],
1671
+ [22, 28, "LOCATION", "London"]
1672
+ ]
1673
+ },
1674
+ {
1675
+ "text": "Car rental in Lisbon for a week",
1676
+ "entities": [
1677
+ [4, 13, "SERVICE", "car rental"],
1678
+ [17, 23, "LOCATION", "Lisbon"]
1679
+ ]
1680
+ },
1681
+ {
1682
+ "text": "Tours in Madrid next month",
1683
+ "entities": [
1684
+ [0, 5, "SERVICE", "tour"],
1685
+ [10, 16, "LOCATION", "Madrid"]
1686
+ ]
1687
+ },
1688
+ {
1689
+ "text": "Khách sạn gần bến xe ở Nha Trang",
1690
+ "entities": [
1691
+ [10, 17, "SERVICE", "hotel"],
1692
+ [22, 29, "LOCATION", "Nha Trang"]
1693
+ ]
1694
+ },
1695
+ {
1696
+ "text": "Vé máy bay đi New York",
1697
+ "entities": [
1698
+ [4, 13, "SERVICE", "flight"],
1699
+ [17, 24, "LOCATION", "York"]
1700
+ ]
1701
+ },
1702
+ {
1703
+ "text": "Tour du lịch Đà Lạt 9 ngày 8 đêm",
1704
+ "entities": [
1705
+ [4, 10, "SERVICE", "tour"],
1706
+ [14, 21, "LOCATION", "Đà Lạt"]
1707
+ ]
1708
+ },
1709
+ {
1710
+ "text": "Thuê xe ô tô ở Sài Gòn",
1711
+ "entities": [
1712
+ [6, 15, "SERVICE", "car rental"],
1713
+ [20, 28, "LOCATION", "Sài Gòn"]
1714
+ ]
1715
+ },
1716
+ {
1717
+ "text": "Vé tham quan Núi Bà Đen",
1718
+ "entities": [
1719
+ [4, 12, "SERVICE", "ticket"],
1720
+ [16, 27, "LOCATION", "Bà Đen"]
1721
+ ]
1722
+ },
1723
+ {
1724
+ "text": "Khách sạn gần biển ở Phú Quốc",
1725
+ "entities": [
1726
+ [10, 17, "SERVICE", "hotel"],
1727
+ [22, 31, "LOCATION", "Phú Quốc"]
1728
+ ]
1729
+ },
1730
+ {
1731
+ "text": "Tour du lịch Huế 8 ngày 7 đêm",
1732
+ "entities": [
1733
+ [4, 10, "SERVICE", "tour"],
1734
+ [14, 18, "LOCATION", "Huế"]
1735
+ ]
1736
+ },
1737
+ {
1738
+ "text": "Vé máy bay đi Bangkok",
1739
+ "entities": [
1740
+ [4, 13, "SERVICE", "flight"],
1741
+ [17, 24, "LOCATION", "Bangkok"]
1742
+ ]
1743
+ },
1744
+ {
1745
+ "text": "Thuê xe máy ở Đà Lạt",
1746
+ "entities": [
1747
+ [6, 15, "SERVICE", "car rental"],
1748
+ [20, 27, "LOCATION", "Đà Lạt"]
1749
+ ]
1750
+ },
1751
+ {
1752
+ "text": "Vé tham quan Cù Lao Câu",
1753
+ "entities": [
1754
+ [4, 12, "SERVICE", "ticket"],
1755
+ [16, 27, "LOCATION", "Cù Lao Câu"]
1756
+ ]
1757
+ },
1758
+ {
1759
+ "text": "Khách sạn 4 sao ở Hạ Long",
1760
+ "entities": [
1761
+ [10, 17, "SERVICE", "hotel"],
1762
+ [22, 28, "LOCATION", "Hạ Long"]
1763
+ ]
1764
+ },
1765
+ {
1766
+ "text": "Tour du lịch Sa Pa 7 ngày 6 đêm",
1767
+ "entities": [
1768
+ [4, 10, "SERVICE", "tour"],
1769
+ [14, 18, "LOCATION", "Sa Pa"]
1770
+ ]
1771
+ },
1772
+ {
1773
+ "text": "Vé máy bay đi London",
1774
+ "entities": [
1775
+ [4, 13, "SERVICE", "flight"],
1776
+ [17, 23, "LOCATION", "London"]
1777
+ ]
1778
+ },
1779
+ {
1780
+ "text": "Thuê xe hơi ở Nha Trang",
1781
+ "entities": [
1782
+ [6, 15, "SERVICE", "car rental"],
1783
+ [20, 28, "LOCATION", "Nha Trang"]
1784
+ ]
1785
+ },
1786
+ {
1787
+ "text": "Vé tham quan Chùa Bái Đính",
1788
+ "entities": [
1789
+ [4, 12, "SERVICE", "ticket"],
1790
+ [16, 28, "LOCATION", "Bái Đính"]
1791
+ ]
1792
+ },
1793
+ {
1794
+ "text": "Khách sạn gần biển ở Phan Thiết",
1795
+ "entities": [
1796
+ [10, 17, "SERVICE", "hotel"],
1797
+ [22, 31, "LOCATION", "Phan Thiết"]
1798
+ ]
1799
+ },
1800
+ {
1801
+ "text": "Tour du lịch Mũi Né 8 ngày 7 đêm",
1802
+ "entities": [
1803
+ [4, 10, "SERVICE", "tour"],
1804
+ [14, 20, "LOCATION", "Mũi Né"]
1805
+ ]
1806
+ },
1807
+ {
1808
+ "text": "Vé máy bay đi Amsterdam",
1809
+ "entities": [
1810
+ [4, 13, "SERVICE", "flight"],
1811
+ [17, 25, "LOCATION", "Amsterdam"]
1812
+ ]
1813
+ },
1814
+ {
1815
+ "text": "Thuê xe máy ở Vũng Tàu",
1816
+ "entities": [
1817
+ [6, 15, "SERVICE", "car rental"],
1818
+ [20, 29, "LOCATION", "Vũng Tàu"]
1819
+ ]
1820
+ },
1821
+ {
1822
+ "text": "Vé tham quan Lăng Bác",
1823
+ "entities": [
1824
+ [4, 12, "SERVICE", "ticket"],
1825
+ [16, 23, "LOCATION", "Lăng Bác"]
1826
+ ]
1827
+ },
1828
+ {
1829
+ "text": "Khách sạn 5 sao ở Sài Gòn",
1830
+ "entities": [
1831
+ [10, 17, "SERVICE", "hotel"],
1832
+ [22, 28, "LOCATION", "Sài Gòn"]
1833
+ ]
1834
+ },
1835
+ {
1836
+ "text": "Tour du lịch Ninh Bình 7 ngày 6 đêm",
1837
+ "entities": [
1838
+ [4, 10, "SERVICE", "tour"],
1839
+ [14, 22, "LOCATION", "Ninh Bình"]
1840
+ ]
1841
+ },
1842
+ {
1843
+ "text": "Vé máy bay đi Prague",
1844
+ "entities": [
1845
+ [4, 13, "SERVICE", "flight"],
1846
+ [17, 22, "LOCATION", "Prague"]
1847
+ ]
1848
+ },
1849
+ {
1850
+ "text": "Thuê xe hơi ở Hà Nội",
1851
+ "entities": [
1852
+ [6, 15, "SERVICE", "car rental"],
1853
+ [20, 26, "LOCATION", "Hà Nội"]
1854
+ ]
1855
+ },
1856
+ {
1857
+ "text": "Vé tham quan Suối Nước Nóng",
1858
+ "entities": [
1859
+ [4, 12, "SERVICE", "ticket"],
1860
+ [16, 28, "LOCATION", "Nước Nóng"]
1861
+ ]
1862
+ },
1863
+ {
1864
+ "text": "Khách sạn gần sông Hàn ở Đà Nẵng",
1865
+ "entities": [
1866
+ [10, 17, "SERVICE", "hotel"],
1867
+ [22, 28, "LOCATION", "Đà Nẵng"]
1868
+ ]
1869
+ },
1870
+ {
1871
+ "text": "Tour du lịch Phú Quốc 11 ngày 10 đêm",
1872
+ "entities": [
1873
+ [4, 10, "SERVICE", "tour"],
1874
+ [14, 23, "LOCATION", "Phú Quốc"]
1875
+ ]
1876
+ },
1877
+ {
1878
+ "text": "Vé máy bay đi Côn Đảo",
1879
+ "entities": [
1880
+ [4, 13, "SERVICE", "flight"],
1881
+ [17, 25, "LOCATION", "Côn Đảo"]
1882
+ ]
1883
+ },
1884
+ {
1885
+ "text": "Thuê xe máy ở Đà Lạt",
1886
+ "entities": [
1887
+ [6, 15, "SERVICE", "car rental"],
1888
+ [20, 27, "LOCATION", "Đà Lạt"]
1889
+ ]
1890
+ },
1891
+ {
1892
+ "text": "Vé tham quan Vịnh Lan Hạ",
1893
+ "entities": [
1894
+ [4, 12, "SERVICE", "ticket"],
1895
+ [16, 26, "LOCATION", "Lan Hạ"]
1896
+ ]
1897
+ },
1898
+ {
1899
+ "text": "Khách sạn gần sân bay ở Sài Gòn",
1900
+ "entities": [
1901
+ [10, 17, "SERVICE", "hotel"],
1902
+ [22, 28, "LOCATION", "Sài Gòn"]
1903
+ ]
1904
+ },
1905
+ {
1906
+ "text": "Tour du lịch Hạ Long 9 ngày 8 đêm",
1907
+ "entities": [
1908
+ [4, 10, "SERVICE", "tour"],
1909
+ [14, 21, "LOCATION", "Hạ Long"]
1910
+ ]
1911
+ },
1912
+ {
1913
+ "text": "Vé máy bay đi Huế",
1914
+ "entities": [
1915
+ [4, 13, "SERVICE", "flight"],
1916
+ [17, 20, "LOCATION", "Huế"]
1917
+ ]
1918
+ },
1919
+ {
1920
+ "text": "Thuê xe hơi ở Nha Trang",
1921
+ "entities": [
1922
+ [6, 15, "SERVICE", "car rental"],
1923
+ [20, 28, "LOCATION", "Nha Trang"]
1924
+ ]
1925
+ },
1926
+ {
1927
+ "text": "Vé tham quan Di tích Mỹ Sơn",
1928
+ "entities": [
1929
+ [4, 12, "SERVICE", "ticket"],
1930
+ [16, 29, "LOCATION", "Mỹ Sơn"]
1931
+ ]
1932
+ },
1933
+ {
1934
+ "text": "Khách sạn gần biển ở Phú Quốc",
1935
+ "entities": [
1936
+ [10, 17, "SERVICE", "hotel"],
1937
+ [22, 31, "LOCATION", "Phú Quốc"]
1938
+ ]
1939
+ },
1940
+ {
1941
+ "text": "Tour du lịch Cần Thơ 8 ngày 7 đêm",
1942
+ "entities": [
1943
+ [4, 10, "SERVICE", "tour"],
1944
+ [14, 21, "LOCATION", "Cần Thơ"]
1945
+ ]
1946
+ },
1947
+ {
1948
+ "text": "Vé máy bay đi Vũng Tàu",
1949
+ "entities": [
1950
+ [4, 13, "SERVICE", "flight"],
1951
+ [17, 26, "LOCATION", "Vũng Tàu"]
1952
+ ]
1953
+ },
1954
+ {
1955
+ "text": "Thuê xe máy ở Quy Nhơn",
1956
+ "entities": [
1957
+ [6, 15, "SERVICE", "car rental"],
1958
+ [20, 28, "LOCATION", "Quy Nhơn"]
1959
+ ]
1960
+ },
1961
+ {
1962
+ "text": "Vé tham quan Vườn Quốc gia Phong Nha - Kẻ Bàng",
1963
+ "entities": [
1964
+ [4, 12, "SERVICE", "ticket"],
1965
+ [16, 39, "LOCATION", "Phong Nha"]
1966
+ ]
1967
+ },
1968
+ {
1969
+ "text": "Hotels near the main square in Budapest",
1970
+ "entities": [
1971
+ [0, 6, "SERVICE", "hotel"],
1972
+ [26, 33, "LOCATION", "Budapest"]
1973
+ ]
1974
+ },
1975
+ {
1976
+ "text": "Flights to Amsterdam for a weekend break",
1977
+ "entities": [
1978
+ [0, 7, "SERVICE", "flight"],
1979
+ [11, 19, "LOCATION", "Amsterdam"]
1980
+ ]
1981
+ },
1982
+ {
1983
+ "text": "Car rental in Vienna for 7 days",
1984
+ "entities": [
1985
+ [4, 13, "SERVICE", "car rental"],
1986
+ [17, 23, "LOCATION", "Vienna"]
1987
+ ]
1988
+ },
1989
+ {
1990
+ "text": "Tours in Venice in November",
1991
+ "entities": [
1992
+ [0, 5, "SERVICE", "tour"],
1993
+ [10, 16, "LOCATION", "Venice"]
1994
+ ]
1995
+ },
1996
+ {
1997
+ "text": "Tickets to the Trevi Fountain",
1998
+ "entities": [
1999
+ [0, 7, "SERVICE", "ticket"],
2000
+ [14, 27, "LOCATION", "Fountain"]
2001
+ ]
2002
+ },
2003
+ {
2004
+ "text": "Budget hotels in Lisbon",
2005
+ "entities": [
2006
+ [5, 11, "SERVICE", "hotel"],
2007
+ [15, 21, "LOCATION", "Lisbon"]
2008
+ ]
2009
+ },
2010
+ {
2011
+ "text": "Flights from Rome to Paris",
2012
+ "entities": [
2013
+ [0, 7, "SERVICE", "flight"],
2014
+ [12, 16, "LOCATION", "Rome"],
2015
+ [20, 24, "LOCATION", "Paris"]
2016
+ ]
2017
+ },
2018
+ {
2019
+ "text": "Car rental in Madrid for a week",
2020
+ "entities": [
2021
+ [4, 13, "SERVICE", "car rental"],
2022
+ [17, 23, "LOCATION", "Madrid"]
2023
+ ]
2024
+ },
2025
+ {
2026
+ "text": "Tours in London next month",
2027
+ "entities": [
2028
+ [0, 5, "SERVICE", "tour"],
2029
+ [10, 16, "LOCATION", "London"]
2030
+ ]
2031
+ },
2032
+ {
2033
+ "text": "khach san gia re o ha noi",
2034
+ "entities": [
2035
+ [10, 17, "SERVICE", "hotel"],
2036
+ [22, 28, "LOCATION", "ha noi"]
2037
+ ]
2038
+ },
2039
+ {
2040
+ "text": "ve may bay di da nang",
2041
+ "entities": [
2042
+ [4, 13, "SERVICE", "flight"],
2043
+ [17, 25, "LOCATION", "da nang"]
2044
+ ]
2045
+ },
2046
+ {
2047
+ "text": "du lich hue 3 ngay 2 dem",
2048
+ "entities": [
2049
+ [4, 10, "SERVICE", "tour"],
2050
+ [14, 18, "LOCATION", "hue"]
2051
+ ]
2052
+ },
2053
+ {
2054
+ "text": "thue xe hoi o sai gon",
2055
+ "entities": [
2056
+ [6, 15, "SERVICE", "car rental"],
2057
+ [20, 28, "LOCATION", "sai gon"]
2058
+ ]
2059
+ },
2060
+ {
2061
+ "text": "ve tham quan vinh ha long",
2062
+ "entities": [
2063
+ [4, 12, "SERVICE", "ticket"],
2064
+ [16, 27, "LOCATION", "ha long"]
2065
+ ]
2066
+ },
2067
+ {
2068
+ "text": "khach san gan bien o nha trang",
2069
+ "entities": [
2070
+ [10, 17, "SERVICE", "hotel"],
2071
+ [22, 29, "LOCATION", "nha trang"]
2072
+ ]
2073
+ },
2074
+ {
2075
+ "text": "du lich da lat gia re",
2076
+ "entities": [
2077
+ [4, 10, "SERVICE", "tour"],
2078
+ [14, 21, "LOCATION", "da lat"]
2079
+ ]
2080
+ },
2081
+ {
2082
+ "text": "ve may bay di phu quoc",
2083
+ "entities": [
2084
+ [4, 13, "SERVICE", "flight"],
2085
+ [17, 26, "LOCATION", "phu quoc"]
2086
+ ]
2087
+ },
2088
+ {
2089
+ "text": "thue xe may o hoi an",
2090
+ "entities": [
2091
+ [6, 15, "SERVICE", "car rental"],
2092
+ [20, 26, "LOCATION", "hoi an"]
2093
+ ]
2094
+ },
2095
+ {
2096
+ "text": "ve tham quan cu lao cham",
2097
+ "entities": [
2098
+ [4, 12, "SERVICE", "ticket"],
2099
+ [16, 27, "LOCATION", "cu lao cham"]
2100
+ ]
2101
+ },
2102
+ {
2103
+ "text": "khach san 4 sao o can tho",
2104
+ "entities": [
2105
+ [10, 17, "SERVICE", "hotel"],
2106
+ [22, 28, "LOCATION", "can tho"]
2107
+ ]
2108
+ },
2109
+ {
2110
+ "text": "du lich sa pa 2 ngay 1 dem",
2111
+ "entities": [
2112
+ [4, 10, "SERVICE", "tour"],
2113
+ [14, 18, "LOCATION", "sa pa"]
2114
+ ]
2115
+ },
2116
+ {
2117
+ "text": "ve may bay di quy nhon",
2118
+ "entities": [
2119
+ [4, 13, "SERVICE", "flight"],
2120
+ [17, 26, "LOCATION", "quy nhon"]
2121
+ ]
2122
+ },
2123
+ {
2124
+ "text": "thue xe hoi o da nang",
2125
+ "entities": [
2126
+ [6, 15, "SERVICE", "car rental"],
2127
+ [20, 28, "LOCATION", "da nang"]
2128
+ ]
2129
+ },
2130
+ {
2131
+ "text": "ve tham quan phong nha ke bang",
2132
+ "entities": [
2133
+ [4, 12, "SERVICE", "ticket"],
2134
+ [16, 24, "LOCATION", "phong nha"]
2135
+ ]
2136
+ },
2137
+ {
2138
+ "text": "khach san gan bien o phan thiet",
2139
+ "entities": [
2140
+ [10, 17, "SERVICE", "hotel"],
2141
+ [22, 31, "LOCATION", "phan thiet"]
2142
+ ]
2143
+ },
2144
+ {
2145
+ "text": "du lich mui ne 4 ngay 3 dem",
2146
+ "entities": [
2147
+ [4, 10, "SERVICE", "tour"],
2148
+ [14, 20, "LOCATION", "mui ne"]
2149
+ ]
2150
+ },
2151
+ {
2152
+ "text": "ve may bay di nha trang",
2153
+ "entities": [
2154
+ [4, 13, "SERVICE", "flight"],
2155
+ [17, 25, "LOCATION", "nha trang"]
2156
+ ]
2157
+ },
2158
+ {
2159
+ "text": "thue xe may o vung tau",
2160
+ "entities": [
2161
+ [6, 15, "SERVICE", "car rental"],
2162
+ [20, 29, "LOCATION", "vung tau"]
2163
+ ]
2164
+ },
2165
+ {
2166
+ "text": "ve tham quan di san my son",
2167
+ "entities": [
2168
+ [4, 12, "SERVICE", "ticket"],
2169
+ [16, 29, "LOCATION", "my son"]
2170
+ ]
2171
+ },
2172
+ {
2173
+ "text": "khach san 5 sao o hai phong",
2174
+ "entities": [
2175
+ [10, 17, "SERVICE", "hotel"],
2176
+ [22, 30, "LOCATION", "hai phong"]
2177
+ ]
2178
+ },
2179
+ {
2180
+ "text": "du lich ninh binh 1 ngay",
2181
+ "entities": [
2182
+ [4, 10, "SERVICE", "tour"],
2183
+ [14, 22, "LOCATION", "ninh binh"]
2184
+ ]
2185
+ },
2186
+ {
2187
+ "text": "ve may bay di quang ninh",
2188
+ "entities": [
2189
+ [4, 13, "SERVICE", "flight"],
2190
+ [17, 28, "LOCATION", "quang ninh"]
2191
+ ]
2192
+ },
2193
+ {
2194
+ "text": "thue xe hoi o ha noi",
2195
+ "entities": [
2196
+ [6, 15, "SERVICE", "car rental"],
2197
+ [20, 26, "LOCATION", "ha noi"]
2198
+ ]
2199
+ },
2200
+ {
2201
+ "text": "ve tham quan bai dinh",
2202
+ "entities": [
2203
+ [4, 12, "SERVICE", "ticket"],
2204
+ [16, 24, "LOCATION", "bai dinh"]
2205
+ ]
2206
+ },
2207
+ {
2208
+ "text": "khach san gan ho guom o ha noi",
2209
+ "entities": [
2210
+ [10, 17, "SERVICE", "hotel"],
2211
+ [22, 28, "LOCATION", "ha noi"]
2212
+ ]
2213
+ },
2214
+ {
2215
+ "text": "du lich phu quoc 5 ngay 4 dem",
2216
+ "entities": [
2217
+ [4, 10, "SERVICE", "tour"],
2218
+ [14, 23, "LOCATION", "phu quoc"]
2219
+ ]
2220
+ },
2221
+ {
2222
+ "text": "ve may bay di con dao",
2223
+ "entities": [
2224
+ [4, 13, "SERVICE", "flight"],
2225
+ [17, 25, "LOCATION", "con dao"]
2226
+ ]
2227
+ },
2228
+ {
2229
+ "text": "thue xe may o da lat",
2230
+ "entities": [
2231
+ [6, 15, "SERVICE", "car rental"],
2232
+ [20, 27, "LOCATION", "da lat"]
2233
+ ]
2234
+ },
2235
+ {
2236
+ "text": "ve tham quan thac ban gioc",
2237
+ "entities": [
2238
+ [4, 12, "SERVICE", "ticket"],
2239
+ [16, 28, "LOCATION", "ban gioc"]
2240
+ ]
2241
+ },
2242
+ {
2243
+ "text": "khach san gan san bay o da nang",
2244
+ "entities": [
2245
+ [10, 17, "SERVICE", "hotel"],
2246
+ [22, 28, "LOCATION", "da nang"]
2247
+ ]
2248
+ },
2249
+ {
2250
+ "text": "du lich ha long 3 ngay 2 dem",
2251
+ "entities": [
2252
+ [4, 10, "SERVICE", "tour"],
2253
+ [14, 21, "LOCATION", "ha long"]
2254
+ ]
2255
+ },
2256
+ {
2257
+ "text": "ve may bay di hue",
2258
+ "entities": [
2259
+ [4, 13, "SERVICE", "flight"],
2260
+ [17, 20, "LOCATION", "hue"]
2261
+ ]
2262
+ },
2263
+ {
2264
+ "text": "thue xe hoi o nha trang",
2265
+ "entities": [
2266
+ [6, 15, "SERVICE", "car rental"],
2267
+ [20, 28, "LOCATION", "nha trang"]
2268
+ ]
2269
+ },
2270
+ {
2271
+ "text": "ve tham quan chua huong",
2272
+ "entities": [
2273
+ [4, 12, "SERVICE", "ticket"],
2274
+ [16, 27, "LOCATION", "chua huong"]
2275
+ ]
2276
+ },
2277
+ {
2278
+ "text": "khach san gan bien o phu quoc",
2279
+ "entities": [
2280
+ [10, 17, "SERVICE", "hotel"],
2281
+ [22, 31, "LOCATION", "phu quoc"]
2282
+ ]
2283
+ },
2284
+ {
2285
+ "text": "du lich can tho 2 ngay 1 dem",
2286
+ "entities": [
2287
+ [4, 10, "SERVICE", "tour"],
2288
+ [14, 21, "LOCATION", "can tho"]
2289
+ ]
2290
+ },
2291
+ {
2292
+ "text": "ve may bay di vung tau",
2293
+ "entities": [
2294
+ [4, 13, "SERVICE", "flight"],
2295
+ [17, 26, "LOCATION", "vung tau"]
2296
+ ]
2297
+ },
2298
+ {
2299
+ "text": "thue xe may o quy nhon",
2300
+ "entities": [
2301
+ [6, 15, "SERVICE", "car rental"],
2302
+ [20, 28, "LOCATION", "quy nhon"]
2303
+ ]
2304
+ },
2305
+ {
2306
+ "text": "ve tham quan bien ho ta dung",
2307
+ "entities": [
2308
+ [4, 12, "SERVICE", "ticket"],
2309
+ [16, 24, "LOCATION", "ta dung"]
2310
+ ]
2311
+ },
2312
+ {
2313
+ "text": "tim khach san o da lat gia re",
2314
+ "entities": [
2315
+ [4, 11, "SERVICE", "hotel"],
2316
+ [15, 21, "LOCATION", "da lat"]
2317
+ ]
2318
+ },
2319
+ {
2320
+ "text": "ve may bay di singapore",
2321
+ "entities": [
2322
+ [4, 13, "SERVICE", "flight"],
2323
+ [17, 26, "LOCATION", "singapore"]
2324
+ ]
2325
+ },
2326
+ {
2327
+ "text": "du lich sa pa 4 ngay 3 dem",
2328
+ "entities": [
2329
+ [4, 10, "SERVICE", "tour"],
2330
+ [14, 18, "LOCATION", "sa pa"]
2331
+ ]
2332
+ },
2333
+ {
2334
+ "text": "thue xe o to o ha noi",
2335
+ "entities": [
2336
+ [6, 15, "SERVICE", "car rental"],
2337
+ [20, 26, "LOCATION", "ha noi"]
2338
+ ]
2339
+ },
2340
+ {
2341
+ "text": "ve tham quan thap cham",
2342
+ "entities": [
2343
+ [4, 12, "SERVICE", "ticket"],
2344
+ [16, 25, "LOCATION", "cham"]
2345
+ ]
2346
+ },
2347
+ {
2348
+ "text": "khach san gan cho o hoi an",
2349
+ "entities": [
2350
+ [10, 17, "SERVICE", "hotel"],
2351
+ [22, 28, "LOCATION", "hoi an"]
2352
+ ]
2353
+ },
2354
+ {
2355
+ "text": "du lich nha trang 2 ngay 1 dem",
2356
+ "entities": [
2357
+ [4, 10, "SERVICE", "tour"],
2358
+ [14, 21, "LOCATION", "nha trang"]
2359
+ ]
2360
+ },
2361
+ {
2362
+ "text": "ve may bay di bangkok",
2363
+ "entities": [
2364
+ [4, 13, "SERVICE", "flight"],
2365
+ [17, 24, "LOCATION", "bangkok"]
2366
+ ]
2367
+ },
2368
+ {
2369
+ "text": "thue xe may o phu quoc",
2370
+ "entities": [
2371
+ [6, 15, "SERVICE", "car rental"],
2372
+ [20, 29, "LOCATION", "phu quoc"]
2373
+ ]
2374
+ },
2375
+ {
2376
+ "text": "ve tham quan vuon quoc gia cuc phuong",
2377
+ "entities": [
2378
+ [4, 12, "SERVICE", "ticket"],
2379
+ [16, 37, "LOCATION", "cuc phuong"]
2380
+ ]
2381
+ },
2382
+ {
2383
+ "text": "khach san 3 sao o hue",
2384
+ "entities": [
2385
+ [10, 17, "SERVICE", "hotel"],
2386
+ [22, 25, "LOCATION", "hue"]
2387
+ ]
2388
+ },
2389
+ {
2390
+ "text": "du lich can tho 3 ngay 2 dem",
2391
+ "entities": [
2392
+ [4, 10, "SERVICE", "tour"],
2393
+ [14, 21, "LOCATION", "can tho"]
2394
+ ]
2395
+ },
2396
+ {
2397
+ "text": "ve may bay di da nang",
2398
+ "entities": [
2399
+ [4, 13, "SERVICE", "flight"],
2400
+ [17, 25, "LOCATION", "da nang"]
2401
+ ]
2402
+ },
2403
+ {
2404
+ "text": "thue xe hoi o quy nhon",
2405
+ "entities": [
2406
+ [6, 15, "SERVICE", "car rental"],
2407
+ [20, 28, "LOCATION", "quy nhon"]
2408
+ ]
2409
+ },
2410
+ {
2411
+ "text": "ve tham quan chua thien mu",
2412
+ "entities": [
2413
+ [4, 12, "SERVICE", "ticket"],
2414
+ [16, 27, "LOCATION", "thien mu"]
2415
+ ]
2416
+ },
2417
+ {
2418
+ "text": "khach san gan bien o phan thiet",
2419
+ "entities": [
2420
+ [10, 17, "SERVICE", "hotel"],
2421
+ [22, 31, "LOCATION", "phan thiet"]
2422
+ ]
2423
+ },
2424
+ {
2425
+ "text": "du lich mui ne 4 ngay 3 dem",
2426
+ "entities": [
2427
+ [4, 10, "SERVICE", "tour"],
2428
+ [14, 20, "LOCATION", "mui ne"]
2429
+ ]
2430
+ },
2431
+ {
2432
+ "text": "ve may bay di nha trang",
2433
+ "entities": [
2434
+ [4, 13, "SERVICE", "flight"],
2435
+ [17, 25, "LOCATION", "nha trang"]
2436
+ ]
2437
+ },
2438
+ {
2439
+ "text": "thue xe may o vung tau",
2440
+ "entities": [
2441
+ [6, 15, "SERVICE", "car rental"],
2442
+ [20, 29, "LOCATION", "vung tau"]
2443
+ ]
2444
+ },
2445
+ {
2446
+ "text": "ve tham quan lang bac",
2447
+ "entities": [
2448
+ [4, 12, "SERVICE", "ticket"],
2449
+ [16, 23, "LOCATION", "lang bac"]
2450
+ ]
2451
+ },
2452
+ {
2453
+ "text": "khach san 4 sao o sai gon",
2454
+ "entities": [
2455
+ [10, 17, "SERVICE", "hotel"],
2456
+ [22, 28, "LOCATION", "sai gon"]
2457
+ ]
2458
+ },
2459
+ {
2460
+ "text": "du lich ninh binh 1 ngay",
2461
+ "entities": [
2462
+ [4, 10, "SERVICE", "tour"],
2463
+ [14, 22, "LOCATION", "ninh binh"]
2464
+ ]
2465
+ },
2466
+ {
2467
+ "text": "ve may bay di quang ninh",
2468
+ "entities": [
2469
+ [4, 13, "SERVICE", "flight"],
2470
+ [17, 28, "LOCATION", "quang ninh"]
2471
+ ]
2472
+ },
2473
+ {
2474
+ "text": "thue xe hoi o ha noi",
2475
+ "entities": [
2476
+ [6, 15, "SERVICE", "car rental"],
2477
+ [20, 26, "LOCATION", "ha noi"]
2478
+ ]
2479
+ },
2480
+ {
2481
+ "text": "ve tham quan bai dinh",
2482
+ "entities": [
2483
+ [4, 12, "SERVICE", "ticket"],
2484
+ [16, 24, "LOCATION", "bai dinh"]
2485
+ ]
2486
+ },
2487
+ {
2488
+ "text": "ks gia re o ha noi",
2489
+ "entities": [
2490
+ [0, 2, "SERVICE", "hotel"],
2491
+ [8, 14, "LOCATION", "ha noi"]
2492
+ ]
2493
+ },
2494
+ {
2495
+ "text": "ve may bay di da nang",
2496
+ "entities": [
2497
+ [4, 13, "SERVICE", "flight"],
2498
+ [17, 25, "LOCATION", "da nang"]
2499
+ ]
2500
+ },
2501
+ {
2502
+ "text": "du lich hue 3 ngay 2 dem",
2503
+ "entities": [
2504
+ [4, 10, "SERVICE", "tour"],
2505
+ [14, 18, "LOCATION", "hue"]
2506
+ ]
2507
+ },
2508
+ {
2509
+ "text": "thue xe hoi o sai gon",
2510
+ "entities": [
2511
+ [6, 15, "SERVICE", "car rental"],
2512
+ [20, 28, "LOCATION", "sai gon"]
2513
+ ]
2514
+ },
2515
+ {
2516
+ "text": "ve tham quan vinh ha long",
2517
+ "entities": [
2518
+ [4, 12, "SERVICE", "ticket"],
2519
+ [16, 27, "LOCATION", "ha long"]
2520
+ ]
2521
+ },
2522
+ {
2523
+ "text": "ks gan bien o nha trang",
2524
+ "entities": [
2525
+ [0, 2, "SERVICE", "hotel"],
2526
+ [8, 15, "LOCATION", "nha trang"]
2527
+ ]
2528
+ },
2529
+ {
2530
+ "text": "du lich da lat gia re",
2531
+ "entities": [
2532
+ [4, 10, "SERVICE", "tour"],
2533
+ [14, 21, "LOCATION", "da lat"]
2534
+ ]
2535
+ },
2536
+ {
2537
+ "text": "ve may bay di phu quoc",
2538
+ "entities": [
2539
+ [4, 13, "SERVICE", "flight"],
2540
+ [17, 26, "LOCATION", "phu quoc"]
2541
+ ]
2542
+ },
2543
+ {
2544
+ "text": "thue xe may o hoi an",
2545
+ "entities": [
2546
+ [6, 15, "SERVICE", "car rental"],
2547
+ [20, 26, "LOCATION", "hoi an"]
2548
+ ]
2549
+ },
2550
+ {
2551
+ "text": "ve tham quan cu lao cham",
2552
+ "entities": [
2553
+ [4, 12, "SERVICE", "ticket"],
2554
+ [16, 27, "LOCATION", "cu lao cham"]
2555
+ ]
2556
+ },
2557
+ {
2558
+ "text": "ks 4 sao o can tho",
2559
+ "entities": [
2560
+ [0, 2, "SERVICE", "hotel"],
2561
+ [8, 14, "LOCATION", "can tho"]
2562
+ ]
2563
+ },
2564
+ {
2565
+ "text": "du lich sa pa 2 ngay 1 dem",
2566
+ "entities": [
2567
+ [4, 10, "SERVICE", "tour"],
2568
+ [14, 18, "LOCATION", "sa pa"]
2569
+ ]
2570
+ },
2571
+ {
2572
+ "text": "ve may bay di quy nhon",
2573
+ "entities": [
2574
+ [4, 13, "SERVICE", "flight"],
2575
+ [17, 26, "LOCATION", "quy nhon"]
2576
+ ]
2577
+ },
2578
+ {
2579
+ "text": "thue xe hoi o da nang",
2580
+ "entities": [
2581
+ [6, 15, "SERVICE", "car rental"],
2582
+ [20, 28, "LOCATION", "da nang"]
2583
+ ]
2584
+ },
2585
+ {
2586
+ "text": "ve tham quan phong nha ke bang",
2587
+ "entities": [
2588
+ [4, 12, "SERVICE", "ticket"],
2589
+ [16, 24, "LOCATION", "phong nha"]
2590
+ ]
2591
+ },
2592
+ {
2593
+ "text": "ks gan bien o phan thiet",
2594
+ "entities": [
2595
+ [0, 2, "SERVICE", "hotel"],
2596
+ [8, 17, "LOCATION", "phan thiet"]
2597
+ ]
2598
+ },
2599
+ {
2600
+ "text": "du lich mui ne 4 ngay 3 dem",
2601
+ "entities": [
2602
+ [4, 10, "SERVICE", "tour"],
2603
+ [14, 20, "LOCATION", "mui ne"]
2604
+ ]
2605
+ },
2606
+ {
2607
+ "text": "ve may bay di nha trang",
2608
+ "entities": [
2609
+ [4, 13, "SERVICE", "flight"],
2610
+ [17, 25, "LOCATION", "nha trang"]
2611
+ ]
2612
+ },
2613
+ {
2614
+ "text": "thue xe may o vung tau",
2615
+ "entities": [
2616
+ [6, 15, "SERVICE", "car rental"],
2617
+ [20, 29, "LOCATION", "vung tau"]
2618
+ ]
2619
+ },
2620
+ {
2621
+ "text": "ve tham quan di san my son",
2622
+ "entities": [
2623
+ [4, 12, "SERVICE", "ticket"],
2624
+ [16, 29, "LOCATION", "my son"]
2625
+ ]
2626
+ },
2627
+ {
2628
+ "text": "ks 5 sao o hai phong",
2629
+ "entities": [
2630
+ [0, 2, "SERVICE", "hotel"],
2631
+ [8, 16, "LOCATION", "hai phong"]
2632
+ ]
2633
+ },
2634
+ {
2635
+ "text": "du lich ninh binh 1 ngay",
2636
+ "entities": [
2637
+ [4, 10, "SERVICE", "tour"],
2638
+ [14, 22, "LOCATION", "ninh binh"]
2639
+ ]
2640
+ },
2641
+ {
2642
+ "text": "ve may bay di quang ninh",
2643
+ "entities": [
2644
+ [4, 13, "SERVICE", "flight"],
2645
+ [17, 28, "LOCATION", "quang ninh"]
2646
+ ]
2647
+ },
2648
+ {
2649
+ "text": "thue xe hoi o ha noi",
2650
+ "entities": [
2651
+ [6, 15, "SERVICE", "car rental"],
2652
+ [20, 26, "LOCATION", "ha noi"]
2653
+ ]
2654
+ },
2655
+ {
2656
+ "text": "ve tham quan bai dinh",
2657
+ "entities": [
2658
+ [4, 12, "SERVICE", "ticket"],
2659
+ [16, 24, "LOCATION", "bai dinh"]
2660
+ ]
2661
+ },
2662
+ {
2663
+ "text": "ks gan ho guom o ha noi",
2664
+ "entities": [
2665
+ [0, 2, "SERVICE", "hotel"],
2666
+ [8, 14, "LOCATION", "ha noi"]
2667
+ ]
2668
+ },
2669
+ {
2670
+ "text": "du lich phu quoc 5 ngay 4 dem",
2671
+ "entities": [
2672
+ [4, 10, "SERVICE", "tour"],
2673
+ [14, 23, "LOCATION", "phu quoc"]
2674
+ ]
2675
+ },
2676
+ {
2677
+ "text": "ve may bay di con dao",
2678
+ "entities": [
2679
+ [4, 13, "SERVICE", "flight"],
2680
+ [17, 25, "LOCATION", "con dao"]
2681
+ ]
2682
+ },
2683
+ {
2684
+ "text": "thue xe may o da lat",
2685
+ "entities": [
2686
+ [6, 15, "SERVICE", "car rental"],
2687
+ [20, 27, "LOCATION", "da lat"]
2688
+ ]
2689
+ },
2690
+ {
2691
+ "text": "ve tham quan thac ban gioc",
2692
+ "entities": [
2693
+ [4, 12, "SERVICE", "ticket"],
2694
+ [16, 28, "LOCATION", "ban gioc"]
2695
+ ]
2696
+ },
2697
+ {
2698
+ "text": "ks gan san bay o da nang",
2699
+ "entities": [
2700
+ [0, 2, "SERVICE", "hotel"],
2701
+ [8, 14, "LOCATION", "da nang"]
2702
+ ]
2703
+ },
2704
+ {
2705
+ "text": "du lich ha long 3 ngay 2 dem",
2706
+ "entities": [
2707
+ [4, 10, "SERVICE", "tour"],
2708
+ [14, 21, "LOCATION", "ha long"]
2709
+ ]
2710
+ },
2711
+ {
2712
+ "text": "ve may bay di hue",
2713
+ "entities": [
2714
+ [4, 13, "SERVICE", "flight"],
2715
+ [17, 20, "LOCATION", "hue"]
2716
+ ]
2717
+ },
2718
+ {
2719
+ "text": "thue xe hoi o nha trang",
2720
+ "entities": [
2721
+ [6, 15, "SERVICE", "car rental"],
2722
+ [20, 28, "LOCATION", "nha trang"]
2723
+ ]
2724
+ },
2725
+ {
2726
+ "text": "ve tham quan chua huong",
2727
+ "entities": [
2728
+ [4, 12, "SERVICE", "ticket"],
2729
+ [16, 27, "LOCATION", "chua huong"]
2730
+ ]
2731
+ },
2732
+ {
2733
+ "text": "ks gan bien o phu quoc",
2734
+ "entities": [
2735
+ [0, 2, "SERVICE", "hotel"],
2736
+ [8, 17, "LOCATION", "phu quoc"]
2737
+ ]
2738
+ },
2739
+ {
2740
+ "text": "du lich can tho 2 ngay 1 dem",
2741
+ "entities": [
2742
+ [4, 10, "SERVICE", "tour"],
2743
+ [14, 21, "LOCATION", "can tho"]
2744
+ ]
2745
+ },
2746
+ {
2747
+ "text": "ve may bay di vung tau",
2748
+ "entities": [
2749
+ [4, 13, "SERVICE", "flight"],
2750
+ [17, 26, "LOCATION", "vung tau"]
2751
+ ]
2752
+ },
2753
+ {
2754
+ "text": "thue xe may o quy nhon",
2755
+ "entities": [
2756
+ [6, 15, "SERVICE", "car rental"],
2757
+ [20, 28, "LOCATION", "quy nhon"]
2758
+ ]
2759
+ },
2760
+ {
2761
+ "text": "ve tham quan bien ho ta dung",
2762
+ "entities": [
2763
+ [4, 12, "SERVICE", "ticket"],
2764
+ [16, 24, "LOCATION", "ta dung"]
2765
+ ]
2766
+ },
2767
+ {
2768
+ "text": "tim ks o da lat gia re",
2769
+ "entities": [
2770
+ [4, 6, "SERVICE", "hotel"],
2771
+ [10, 16, "LOCATION", "da lat"]
2772
+ ]
2773
+ },
2774
+ {
2775
+ "text": "ve may bay di singapore",
2776
+ "entities": [
2777
+ [4, 13, "SERVICE", "flight"],
2778
+ [17, 26, "LOCATION", "singapore"]
2779
+ ]
2780
+ },
2781
+ {
2782
+ "text": "du lich sa pa 4 ngay 3 dem",
2783
+ "entities": [
2784
+ [4, 10, "SERVICE", "tour"],
2785
+ [14, 18, "LOCATION", "sa pa"]
2786
+ ]
2787
+ },
2788
+ {
2789
+ "text": "thue xe o to o ha noi",
2790
+ "entities": [
2791
+ [6, 15, "SERVICE", "car rental"],
2792
+ [20, 26, "LOCATION", "ha noi"]
2793
+ ]
2794
+ },
2795
+ {
2796
+ "text": "ve tham quan thap cham",
2797
+ "entities": [
2798
+ [4, 12, "SERVICE", "ticket"],
2799
+ [16, 25, "LOCATION", "cham"]
2800
+ ]
2801
+ },
2802
+ {
2803
+ "text": "ks gan cho o hoi an",
2804
+ "entities": [
2805
+ [0, 2, "SERVICE", "hotel"],
2806
+ [8, 14, "LOCATION", "hoi an"]
2807
+ ]
2808
+ },
2809
+ {
2810
+ "text": "du lich nha trang 2 ngay 1 dem",
2811
+ "entities": [
2812
+ [4, 10, "SERVICE", "tour"],
2813
+ [14, 21, "LOCATION", "nha trang"]
2814
+ ]
2815
+ },
2816
+ {
2817
+ "text": "ve may bay di bangkok",
2818
+ "entities": [
2819
+ [4, 13, "SERVICE", "flight"],
2820
+ [17, 24, "LOCATION", "bangkok"]
2821
+ ]
2822
+ },
2823
+ {
2824
+ "text": "thue xe may o phu quoc",
2825
+ "entities": [
2826
+ [6, 15, "SERVICE", "car rental"],
2827
+ [20, 29, "LOCATION", "phu quoc"]
2828
+ ]
2829
+ },
2830
+ {
2831
+ "text": "ve tham quan vuon quoc gia cuc phuong",
2832
+ "entities": [
2833
+ [4, 12, "SERVICE", "ticket"],
2834
+ [16, 37, "LOCATION", "cuc phuong"]
2835
+ ]
2836
+ },
2837
+ {
2838
+ "text": "ks 3 sao o hue",
2839
+ "entities": [
2840
+ [0, 2, "SERVICE", "hotel"],
2841
+ [8, 11, "LOCATION", "hue"]
2842
+ ]
2843
+ },
2844
+ {
2845
+ "text": "du lich can tho 3 ngay 2 dem",
2846
+ "entities": [
2847
+ [4, 10, "SERVICE", "tour"],
2848
+ [14, 21, "LOCATION", "can tho"]
2849
+ ]
2850
+ },
2851
+ {
2852
+ "text": "ve may bay di da nang",
2853
+ "entities": [
2854
+ [4, 13, "SERVICE", "flight"],
2855
+ [17, 25, "LOCATION", "da nang"]
2856
+ ]
2857
+ },
2858
+ {
2859
+ "text": "thue xe hoi o quy nhon",
2860
+ "entities": [
2861
+ [6, 15, "SERVICE", "car rental"],
2862
+ [20, 28, "LOCATION", "quy nhon"]
2863
+ ]
2864
+ },
2865
+ {
2866
+ "text": "ve tham quan chua thien mu",
2867
+ "entities": [
2868
+ [4, 12, "SERVICE", "ticket"],
2869
+ [16, 27, "LOCATION", "thien mu"]
2870
+ ]
2871
+ },
2872
+ {
2873
+ "text": "ks gan bien o phan thiet",
2874
+ "entities": [
2875
+ [0, 2, "SERVICE", "hotel"],
2876
+ [8, 17, "LOCATION", "phan thiet"]
2877
+ ]
2878
+ },
2879
+ {
2880
+ "text": "du lich mui ne 4 ngay 3 dem",
2881
+ "entities": [
2882
+ [4, 10, "SERVICE", "tour"],
2883
+ [14, 20, "LOCATION", "mui ne"]
2884
+ ]
2885
+ },
2886
+ {
2887
+ "text": "ks gia re o ha noi",
2888
+ "entities": [
2889
+ [0, 2, "SERVICE", "hotel"],
2890
+ [8, 14, "LOCATION", "ha noi"]
2891
+ ]
2892
+ },
2893
+ {
2894
+ "text": "ve may bay di da nang",
2895
+ "entities": [
2896
+ [4, 13, "SERVICE", "flight"],
2897
+ [17, 25, "LOCATION", "da nang"]
2898
+ ]
2899
+ },
2900
+ {
2901
+ "text": "du lich hue 3 ngay 2 dem",
2902
+ "entities": [
2903
+ [4, 10, "SERVICE", "tour"],
2904
+ [14, 18, "LOCATION", "hue"]
2905
+ ]
2906
+ },
2907
+ {
2908
+ "text": "thue xe hoi o sai gon",
2909
+ "entities": [
2910
+ [6, 15, "SERVICE", "car rental"],
2911
+ [20, 28, "LOCATION", "sai gon"]
2912
+ ]
2913
+ },
2914
+ {
2915
+ "text": "ve tham quan vinh ha long",
2916
+ "entities": [
2917
+ [4, 12, "SERVICE", "ticket"],
2918
+ [16, 27, "LOCATION", "ha long"]
2919
+ ]
2920
+ },
2921
+ {
2922
+ "text": "ks gan bien o nha trang",
2923
+ "entities": [
2924
+ [0, 2, "SERVICE", "hotel"],
2925
+ [8, 15, "LOCATION", "nha trang"]
2926
+ ]
2927
+ },
2928
+ {
2929
+ "text": "du lich da lat gia re",
2930
+ "entities": [
2931
+ [4, 10, "SERVICE", "tour"],
2932
+ [14, 21, "LOCATION", "da lat"]
2933
+ ]
2934
+ },
2935
+ {
2936
+ "text": "ve may bay di phu quoc",
2937
+ "entities": [
2938
+ [4, 13, "SERVICE", "flight"],
2939
+ [17, 26, "LOCATION", "phu quoc"]
2940
+ ]
2941
+ },
2942
+ {
2943
+ "text": "thue xe may o hoi an",
2944
+ "entities": [
2945
+ [6, 15, "SERVICE", "car rental"],
2946
+ [20, 26, "LOCATION", "hoi an"]
2947
+ ]
2948
+ },
2949
+ {
2950
+ "text": "ve tham quan cu lao cham",
2951
+ "entities": [
2952
+ [4, 12, "SERVICE", "ticket"],
2953
+ [16, 27, "LOCATION", "cu lao cham"]
2954
+ ]
2955
+ },
2956
+ {
2957
+ "text": "ks 4 sao o can tho",
2958
+ "entities": [
2959
+ [0, 2, "SERVICE", "hotel"],
2960
+ [8, 14, "LOCATION", "can tho"]
2961
+ ]
2962
+ },
2963
+ {
2964
+ "text": "du lich sa pa 2 ngay 1 dem",
2965
+ "entities": [
2966
+ [4, 10, "SERVICE", "tour"],
2967
+ [14, 18, "LOCATION", "sa pa"]
2968
+ ]
2969
+ },
2970
+ {
2971
+ "text": "ve may bay di quy nhon",
2972
+ "entities": [
2973
+ [4, 13, "SERVICE", "flight"],
2974
+ [17, 26, "LOCATION", "quy nhon"]
2975
+ ]
2976
+ },
2977
+ {
2978
+ "text": "thue xe hoi o da nang",
2979
+ "entities": [
2980
+ [6, 15, "SERVICE", "car rental"],
2981
+ [20, 28, "LOCATION", "da nang"]
2982
+ ]
2983
+ },
2984
+ {
2985
+ "text": "ve tham quan phong nha ke bang",
2986
+ "entities": [
2987
+ [4, 12, "SERVICE", "ticket"],
2988
+ [16, 24, "LOCATION", "phong nha"]
2989
+ ]
2990
+ },
2991
+ {
2992
+ "text": "ks gan bien o phan thiet",
2993
+ "entities": [
2994
+ [0, 2, "SERVICE", "hotel"],
2995
+ [8, 17, "LOCATION", "phan thiet"]
2996
+ ]
2997
+ },
2998
+ {
2999
+ "text": "du lich mui ne 4 ngay 3 dem",
3000
+ "entities": [
3001
+ [4, 10, "SERVICE", "tour"],
3002
+ [14, 20, "LOCATION", "mui ne"]
3003
+ ]
3004
+ },
3005
+ {
3006
+ "text": "ve may bay di nha trang",
3007
+ "entities": [
3008
+ [4, 13, "SERVICE", "flight"],
3009
+ [17, 25, "LOCATION", "nha trang"]
3010
+ ]
3011
+ },
3012
+ {
3013
+ "text": "thue xe may o vung tau",
3014
+ "entities": [
3015
+ [6, 15, "SERVICE", "car rental"],
3016
+ [20, 29, "LOCATION", "vung tau"]
3017
+ ]
3018
+ },
3019
+ {
3020
+ "text": "ve tham quan di san my son",
3021
+ "entities": [
3022
+ [4, 12, "SERVICE", "ticket"],
3023
+ [16, 29, "LOCATION", "my son"]
3024
+ ]
3025
+ },
3026
+ {
3027
+ "text": "ks 5 sao o hai phong",
3028
+ "entities": [
3029
+ [0, 2, "SERVICE", "hotel"],
3030
+ [8, 16, "LOCATION", "hai phong"]
3031
+ ]
3032
+ },
3033
+ {
3034
+ "text": "du lich ninh binh 1 ngay",
3035
+ "entities": [
3036
+ [4, 10, "SERVICE", "tour"],
3037
+ [14, 22, "LOCATION", "ninh binh"]
3038
+ ]
3039
+ },
3040
+ {
3041
+ "text": "ve may bay di quang ninh",
3042
+ "entities": [
3043
+ [4, 13, "SERVICE", "flight"],
3044
+ [17, 28, "LOCATION", "quang ninh"]
3045
+ ]
3046
+ },
3047
+ {
3048
+ "text": "thue xe hoi o ha noi",
3049
+ "entities": [
3050
+ [6, 15, "SERVICE", "car rental"],
3051
+ [20, 26, "LOCATION", "ha noi"]
3052
+ ]
3053
+ },
3054
+ {
3055
+ "text": "ve tham quan bai dinh",
3056
+ "entities": [
3057
+ [4, 12, "SERVICE", "ticket"],
3058
+ [16, 24, "LOCATION", "bai dinh"]
3059
+ ]
3060
+ },
3061
+ {
3062
+ "text": "ks gan ho guom o ha noi",
3063
+ "entities": [
3064
+ [0, 2, "SERVICE", "hotel"],
3065
+ [8, 14, "LOCATION", "ha noi"]
3066
+ ]
3067
+ },
3068
+ {
3069
+ "text": "du lich phu quoc 5 ngay 4 dem",
3070
+ "entities": [
3071
+ [4, 10, "SERVICE", "tour"],
3072
+ [14, 23, "LOCATION", "phu quoc"]
3073
+ ]
3074
+ },
3075
+ {
3076
+ "text": "ve may bay di con dao",
3077
+ "entities": [
3078
+ [4, 13, "SERVICE", "flight"],
3079
+ [17, 25, "LOCATION", "con dao"]
3080
+ ]
3081
+ },
3082
+ {
3083
+ "text": "thue xe may o da lat",
3084
+ "entities": [
3085
+ [6, 15, "SERVICE", "car rental"],
3086
+ [20, 27, "LOCATION", "da lat"]
3087
+ ]
3088
+ },
3089
+ {
3090
+ "text": "ve tham quan thac ban gioc",
3091
+ "entities": [
3092
+ [4, 12, "SERVICE", "ticket"],
3093
+ [16, 28, "LOCATION", "ban gioc"]
3094
+ ]
3095
+ },
3096
+ {
3097
+ "text": "ks gan san bay o da nang",
3098
+ "entities": [
3099
+ [0, 2, "SERVICE", "hotel"],
3100
+ [8, 14, "LOCATION", "da nang"]
3101
+ ]
3102
+ },
3103
+ {
3104
+ "text": "du lich ha long 3 ngay 2 dem",
3105
+ "entities": [
3106
+ [4, 10, "SERVICE", "tour"],
3107
+ [14, 21, "LOCATION", "ha long"]
3108
+ ]
3109
+ },
3110
+ {
3111
+ "text": "ve may bay di hue",
3112
+ "entities": [
3113
+ [4, 13, "SERVICE", "flight"],
3114
+ [17, 20, "LOCATION", "hue"]
3115
+ ]
3116
+ },
3117
+ {
3118
+ "text": "thue xe hoi o nha trang",
3119
+ "entities": [
3120
+ [6, 15, "SERVICE", "car rental"],
3121
+ [20, 28, "LOCATION", "nha trang"]
3122
+ ]
3123
+ },
3124
+ {
3125
+ "text": "ve tham quan chua huong",
3126
+ "entities": [
3127
+ [4, 12, "SERVICE", "ticket"],
3128
+ [16, 27, "LOCATION", "chua huong"]
3129
+ ]
3130
+ },
3131
+ {
3132
+ "text": "ks gan bien o phu quoc",
3133
+ "entities": [
3134
+ [0, 2, "SERVICE", "hotel"],
3135
+ [8, 17, "LOCATION", "phu quoc"]
3136
+ ]
3137
+ },
3138
+ {
3139
+ "text": "du lich can tho 2 ngay 1 dem",
3140
+ "entities": [
3141
+ [4, 10, "SERVICE", "tour"],
3142
+ [14, 21, "LOCATION", "can tho"]
3143
+ ]
3144
+ },
3145
+ {
3146
+ "text": "ve may bay di vung tau",
3147
+ "entities": [
3148
+ [4, 13, "SERVICE", "flight"],
3149
+ [17, 26, "LOCATION", "vung tau"]
3150
+ ]
3151
+ },
3152
+ {
3153
+ "text": "thue xe may o quy nhon",
3154
+ "entities": [
3155
+ [6, 15, "SERVICE", "car rental"],
3156
+ [20, 28, "LOCATION", "quy nhon"]
3157
+ ]
3158
+ },
3159
+ {
3160
+ "text": "ve tham quan bien ho ta dung",
3161
+ "entities": [
3162
+ [4, 12, "SERVICE", "ticket"],
3163
+ [16, 24, "LOCATION", "ta dung"]
3164
+ ]
3165
+ },
3166
+ {
3167
+ "text": "tim ks o da lat gia re",
3168
+ "entities": [
3169
+ [4, 6, "SERVICE", "hotel"],
3170
+ [10, 16, "LOCATION", "da lat"]
3171
+ ]
3172
+ },
3173
+ {
3174
+ "text": "ve may bay di singapore",
3175
+ "entities": [
3176
+ [4, 13, "SERVICE", "flight"],
3177
+ [17, 26, "LOCATION", "singapore"]
3178
+ ]
3179
+ },
3180
+ {
3181
+ "text": "du lich sa pa 4 ngay 3 dem",
3182
+ "entities": [
3183
+ [4, 10, "SERVICE", "tour"],
3184
+ [14, 18, "LOCATION", "sa pa"]
3185
+ ]
3186
+ },
3187
+ {
3188
+ "text": "thue xe o to o ha noi",
3189
+ "entities": [
3190
+ [6, 15, "SERVICE", "car rental"],
3191
+ [20, 26, "LOCATION", "ha noi"]
3192
+ ]
3193
+ },
3194
+ {
3195
+ "text": "ve tham quan thap cham",
3196
+ "entities": [
3197
+ [4, 12, "SERVICE", "ticket"],
3198
+ [16, 25, "LOCATION", "cham"]
3199
+ ]
3200
+ },
3201
+ {
3202
+ "text": "ks gan cho o hoi an",
3203
+ "entities": [
3204
+ [0, 2, "SERVICE", "hotel"],
3205
+ [8, 14, "LOCATION", "hoi an"]
3206
+ ]
3207
+ },
3208
+ {
3209
+ "text": "du lich nha trang 2 ngay 1 dem",
3210
+ "entities": [
3211
+ [4, 10, "SERVICE", "tour"],
3212
+ [14, 21, "LOCATION", "nha trang"]
3213
+ ]
3214
+ },
3215
+ {
3216
+ "text": "ve may bay di bangkok",
3217
+ "entities": [
3218
+ [4, 13, "SERVICE", "flight"],
3219
+ [17, 24, "LOCATION", "bangkok"]
3220
+ ]
3221
+ },
3222
+ {
3223
+ "text": "thue xe may o phu quoc",
3224
+ "entities": [
3225
+ [6, 15, "SERVICE", "car rental"],
3226
+ [20, 29, "LOCATION", "phu quoc"]
3227
+ ]
3228
+ },
3229
+ {
3230
+ "text": "ve tham quan vuon quoc gia cuc phuong",
3231
+ "entities": [
3232
+ [4, 12, "SERVICE", "ticket"],
3233
+ [16, 37, "LOCATION", "cuc phuong"]
3234
+ ]
3235
+ },
3236
+ {
3237
+ "text": "ks 3 sao o hue",
3238
+ "entities": [
3239
+ [0, 2, "SERVICE", "hotel"],
3240
+ [8, 11, "LOCATION", "hue"]
3241
+ ]
3242
+ },
3243
+ {
3244
+ "text": "du lich can tho 3 ngay 2 dem",
3245
+ "entities": [
3246
+ [4, 10, "SERVICE", "tour"],
3247
+ [14, 21, "LOCATION", "can tho"]
3248
+ ]
3249
+ },
3250
+ {
3251
+ "text": "ve may bay di da nang",
3252
+ "entities": [
3253
+ [4, 13, "SERVICE", "flight"],
3254
+ [17, 25, "LOCATION", "da nang"]
3255
+ ]
3256
+ },
3257
+ {
3258
+ "text": "thue xe hoi o quy nhon",
3259
+ "entities": [
3260
+ [6, 15, "SERVICE", "car rental"],
3261
+ [20, 28, "LOCATION", "quy nhon"]
3262
+ ]
3263
+ },
3264
+ {
3265
+ "text": "ve tham quan chua thien mu",
3266
+ "entities": [
3267
+ [4, 12, "SERVICE", "ticket"],
3268
+ [16, 27, "LOCATION", "thien mu"]
3269
+ ]
3270
+ },
3271
+ {
3272
+ "text": "ks gan bien o phan thiet",
3273
+ "entities": [
3274
+ [0, 2, "SERVICE", "hotel"],
3275
+ [8, 17, "LOCATION", "phan thiet"]
3276
+ ]
3277
+ },
3278
+ {
3279
+ "text": "du lich mui ne 4 ngay 3 dem",
3280
+ "entities": [
3281
+ [4, 10, "SERVICE", "tour"],
3282
+ [14, 20, "LOCATION", "mui ne"]
3283
+ ]
3284
+ },
3285
+ {
3286
+ "text": "ks gan pho co o hoi an",
3287
+ "entities": [
3288
+ [0, 2, "SERVICE", "hotel"],
3289
+ [8, 14, "LOCATION", "hoi an"]
3290
+ ]
3291
+ },
3292
+ {
3293
+ "text": "ve may bay di tp hcm",
3294
+ "entities": [
3295
+ [4, 13, "SERVICE", "flight"],
3296
+ [17, 24, "LOCATION", "tp hcm"]
3297
+ ]
3298
+ },
3299
+ {
3300
+ "text": "du lich da lat 6 ngay 5 dem",
3301
+ "entities": [
3302
+ [4, 10, "SERVICE", "tour"],
3303
+ [14, 21, "LOCATION", "da lat"]
3304
+ ]
3305
+ },
3306
+ {
3307
+ "text": "thue xe o to o hanoi",
3308
+ "entities": [
3309
+ [6, 15, "SERVICE", "car rental"],
3310
+ [20, 26, "LOCATION", "hanoi"]
3311
+ ]
3312
+ },
3313
+ {
3314
+ "text": "ve tham quan nui ba den",
3315
+ "entities": [
3316
+ [4, 12, "SERVICE", "ticket"],
3317
+ [16, 27, "LOCATION", "ba den"]
3318
+ ]
3319
+ },
3320
+ {
3321
+ "text": "ks gan bien o phu quoc",
3322
+ "entities": [
3323
+ [0, 2, "SERVICE", "hotel"],
3324
+ [8, 17, "LOCATION", "phu quoc"]
3325
+ ]
3326
+ },
3327
+ {
3328
+ "text": "du lich hue 5 ngay 4 dem",
3329
+ "entities": [
3330
+ [4, 10, "SERVICE", "tour"],
3331
+ [14, 18, "LOCATION", "hue"]
3332
+ ]
3333
+ },
3334
+ {
3335
+ "text": "ve may bay di new york",
3336
+ "entities": [
3337
+ [4, 13, "SERVICE", "flight"],
3338
+ [17, 24, "LOCATION", "new york"]
3339
+ ]
3340
+ },
3341
+ {
3342
+ "text": "thue xe may o da lat",
3343
+ "entities": [
3344
+ [6, 15, "SERVICE", "car rental"],
3345
+ [20, 27, "LOCATION", "da lat"]
3346
+ ]
3347
+ },
3348
+ {
3349
+ "text": "ve tham quan cu lao cau",
3350
+ "entities": [
3351
+ [4, 12, "SERVICE", "ticket"],
3352
+ [16, 27, "LOCATION", "cu lao cau"]
3353
+ ]
3354
+ },
3355
+ {
3356
+ "text": "ks 5 sao o ha long",
3357
+ "entities": [
3358
+ [0, 2, "SERVICE", "hotel"],
3359
+ [8, 14, "LOCATION", "ha long"]
3360
+ ]
3361
+ },
3362
+ {
3363
+ "text": "du lich sa pa 4 ngay 3 dem",
3364
+ "entities": [
3365
+ [4, 10, "SERVICE", "tour"],
3366
+ [14, 18, "LOCATION", "sa pa"]
3367
+ ]
3368
+ },
3369
+ {
3370
+ "text": "ve may bay di london",
3371
+ "entities": [
3372
+ [4, 13, "SERVICE", "flight"],
3373
+ [17, 23, "LOCATION", "london"]
3374
+ ]
3375
+ },
3376
+ {
3377
+ "text": "thue xe hoi o quy nhon",
3378
+ "entities": [
3379
+ [6, 15, "SERVICE", "car rental"],
3380
+ [20, 28, "LOCATION", "quy nhon"]
3381
+ ]
3382
+ },
3383
+ {
3384
+ "text": "ve tham quan chua thien mu",
3385
+ "entities": [
3386
+ [4, 12, "SERVICE", "ticket"],
3387
+ [16, 27, "LOCATION", "thien mu"]
3388
+ ]
3389
+ },
3390
+ {
3391
+ "text": "ks gan bien o phan thiet",
3392
+ "entities": [
3393
+ [0, 2, "SERVICE", "hotel"],
3394
+ [8, 17, "LOCATION", "phan thiet"]
3395
+ ]
3396
+ },
3397
+ {
3398
+ "text": "du lich mui ne 5 ngay 4 dem",
3399
+ "entities": [
3400
+ [4, 10, "SERVICE", "tour"],
3401
+ [14, 20, "LOCATION", "mui ne"]
3402
+ ]
3403
+ },
3404
+ {
3405
+ "text": "ve may bay di bangkok",
3406
+ "entities": [
3407
+ [4, 13, "SERVICE", "flight"],
3408
+ [17, 24, "LOCATION", "bangkok"]
3409
+ ]
3410
+ },
3411
+ {
3412
+ "text": "thue xe may o vung tau",
3413
+ "entities": [
3414
+ [6, 15, "SERVICE", "car rental"],
3415
+ [20, 29, "LOCATION", "vung tau"]
3416
+ ]
3417
+ },
3418
+ {
3419
+ "text": "ve tham quan lang bac",
3420
+ "entities": [
3421
+ [4, 12, "SERVICE", "ticket"],
3422
+ [16, 23, "LOCATION", "lang bac"]
3423
+ ]
3424
+ },
3425
+ {
3426
+ "text": "ks 4 sao o sai gon",
3427
+ "entities": [
3428
+ [0, 2, "SERVICE", "hotel"],
3429
+ [8, 14, "LOCATION", "sai gon"]
3430
+ ]
3431
+ },
3432
+ {
3433
+ "text": "du lich ninh binh 2 ngay 1 dem",
3434
+ "entities": [
3435
+ [4, 10, "SERVICE", "tour"],
3436
+ [14, 22, "LOCATION", "ninh binh"]
3437
+ ]
3438
+ },
3439
+ {
3440
+ "text": "ve may bay di quang ninh",
3441
+ "entities": [
3442
+ [4, 13, "SERVICE", "flight"],
3443
+ [17, 28, "LOCATION", "quang ninh"]
3444
+ ]
3445
+ },
3446
+ {
3447
+ "text": "thue xe hoi o ha noi",
3448
+ "entities": [
3449
+ [6, 15, "SERVICE", "car rental"],
3450
+ [20, 26, "LOCATION", "ha noi"]
3451
+ ]
3452
+ },
3453
+ {
3454
+ "text": "ve tham quan ho ba be",
3455
+ "entities": [
3456
+ [4, 12, "SERVICE", "ticket"],
3457
+ [16, 25, "LOCATION", "ba be"]
3458
+ ]
3459
+ },
3460
+ {
3461
+ "text": "ks gan ho hoan kiem o ha noi",
3462
+ "entities": [
3463
+ [0, 2, "SERVICE", "hotel"],
3464
+ [8, 14, "LOCATION", "ha noi"]
3465
+ ]
3466
+ },
3467
+ {
3468
+ "text": "du lich phu quoc 6 ngay 5 dem",
3469
+ "entities": [
3470
+ [4, 10, "SERVICE", "tour"],
3471
+ [14, 23, "LOCATION", "phu quoc"]
3472
+ ]
3473
+ },
3474
+ {
3475
+ "text": "ve may bay di con dao",
3476
+ "entities": [
3477
+ [4, 13, "SERVICE", "flight"],
3478
+ [17, 25, "LOCATION", "con dao"]
3479
+ ]
3480
+ },
3481
+ {
3482
+ "text": "thue xe may o da lat",
3483
+ "entities": [
3484
+ [6, 15, "SERVICE", "car rental"],
3485
+ [20, 27, "LOCATION", "da lat"]
3486
+ ]
3487
+ },
3488
+ {
3489
+ "text": "ve tham quan vinh lan ha",
3490
+ "entities": [
3491
+ [4, 12, "SERVICE", "ticket"],
3492
+ [16, 26, "LOCATION", "lan ha"]
3493
+ ]
3494
+ },
3495
+ {
3496
+ "text": "ks gan san bay o da nang",
3497
+ "entities": [
3498
+ [0, 2, "SERVICE", "hotel"],
3499
+ [8, 14, "LOCATION", "da nang"]
3500
+ ]
3501
+ },
3502
+ {
3503
+ "text": "du lich ha long 4 ngay 3 dem",
3504
+ "entities": [
3505
+ [4, 10, "SERVICE", "tour"],
3506
+ [14, 21, "LOCATION", "ha long"]
3507
+ ]
3508
+ },
3509
+ {
3510
+ "text": "ve may bay di hue",
3511
+ "entities": [
3512
+ [4, 13, "SERVICE", "flight"],
3513
+ [17, 20, "LOCATION", "hue"]
3514
+ ]
3515
+ },
3516
+ {
3517
+ "text": "thue xe hoi o nha trang",
3518
+ "entities": [
3519
+ [6, 15, "SERVICE", "car rental"],
3520
+ [20, 28, "LOCATION", "nha trang"]
3521
+ ]
3522
+ },
3523
+ {
3524
+ "text": "ve tham quan di tich my son",
3525
+ "entities": [
3526
+ [4, 12, "SERVICE", "ticket"],
3527
+ [16, 29, "LOCATION", "my son"]
3528
+ ]
3529
+ },
3530
+ {
3531
+ "text": "ks gan bien o phu quoc",
3532
+ "entities": [
3533
+ [0, 2, "SERVICE", "hotel"],
3534
+ [8, 17, "LOCATION", "phu quoc"]
3535
+ ]
3536
+ },
3537
+ {
3538
+ "text": "du lich can tho 4 ngay 3 dem",
3539
+ "entities": [
3540
+ [4, 10, "SERVICE", "tour"],
3541
+ [14, 21, "LOCATION", "can tho"]
3542
+ ]
3543
+ },
3544
+ {
3545
+ "text": "ve may bay di vung tau",
3546
+ "entities": [
3547
+ [4, 13, "SERVICE", "flight"],
3548
+ [17, 26, "LOCATION", "vung tau"]
3549
+ ]
3550
+ },
3551
+ {
3552
+ "text": "thue xe may o quy nhon",
3553
+ "entities": [
3554
+ [6, 15, "SERVICE", "car rental"],
3555
+ [20, 28, "LOCATION", "quy nhon"]
3556
+ ]
3557
+ },
3558
+ {
3559
+ "text": "ve tham quan vuon quoc gia phong nha ke bang",
3560
+ "entities": [
3561
+ [4, 12, "SERVICE", "ticket"],
3562
+ [16, 24, "LOCATION", "phong nha"]
3563
+ ]
3564
+ },
3565
+ {
3566
+ "text": "ks gan cho dem o da lat",
3567
+ "entities": [
3568
+ [0, 2, "SERVICE", "hotel"],
3569
+ [8, 14, "LOCATION", "da lat"]
3570
+ ]
3571
+ },
3572
+ {
3573
+ "text": "ve may bay di los angeles",
3574
+ "entities": [
3575
+ [4, 13, "SERVICE", "flight"],
3576
+ [17, 28, "LOCATION", "los angeles"]
3577
+ ]
3578
+ },
3579
+ {
3580
+ "text": "du lich da nang 8 ngay 7 dem",
3581
+ "entities": [
3582
+ [4, 10, "SERVICE", "tour"],
3583
+ [14, 21, "LOCATION", "da nang"]
3584
+ ]
3585
+ },
3586
+ {
3587
+ "text": "thue xe o to o sai gon",
3588
+ "entities": [
3589
+ [6, 15, "SERVICE", "car rental"],
3590
+ [20, 28, "LOCATION", "sai gon"]
3591
+ ]
3592
+ },
3593
+ {
3594
+ "text": "ve tham quan nui ba den",
3595
+ "entities": [
3596
+ [4, 12, "SERVICE", "ticket"],
3597
+ [16, 27, "LOCATION", "ba den"]
3598
+ ]
3599
+ },
3600
+ {
3601
+ "text": "ks gan bien o phu quoc",
3602
+ "entities": [
3603
+ [0, 2, "SERVICE", "hotel"],
3604
+ [8, 17, "LOCATION", "phu quoc"]
3605
+ ]
3606
+ },
3607
+ {
3608
+ "text": "du lich hue 7 ngay 6 dem",
3609
+ "entities": [
3610
+ [4, 10, "SERVICE", "tour"],
3611
+ [14, 18, "LOCATION", "hue"]
3612
+ ]
3613
+ },
3614
+ {
3615
+ "text": "ve may bay di chicago",
3616
+ "entities": [
3617
+ [4, 13, "SERVICE", "flight"],
3618
+ [17, 24, "LOCATION", "chicago"]
3619
+ ]
3620
+ },
3621
+ {
3622
+ "text": "thue xe may o da lat",
3623
+ "entities": [
3624
+ [6, 15, "SERVICE", "car rental"],
3625
+ [20, 27, "LOCATION", "da lat"]
3626
+ ]
3627
+ },
3628
+ {
3629
+ "text": "ve tham quan cu lao cau",
3630
+ "entities": [
3631
+ [4, 12, "SERVICE", "ticket"],
3632
+ [16, 27, "LOCATION", "cu lao cau"]
3633
+ ]
3634
+ },
3635
+ {
3636
+ "text": "ks 5 sao o ha long",
3637
+ "entities": [
3638
+ [0, 2, "SERVICE", "hotel"],
3639
+ [8, 14, "LOCATION", "ha long"]
3640
+ ]
3641
+ },
3642
+ {
3643
+ "text": "du lich sa pa 5 ngay 4 dem",
3644
+ "entities": [
3645
+ [4, 10, "SERVICE", "tour"],
3646
+ [14, 18, "LOCATION", "sa pa"]
3647
+ ]
3648
+ },
3649
+ {
3650
+ "text": "ve may bay di istanbul",
3651
+ "entities": [
3652
+ [4, 13, "SERVICE", "flight"],
3653
+ [17, 25, "LOCATION", "istanbul"]
3654
+ ]
3655
+ },
3656
+ {
3657
+ "text": "thue xe hoi o nha trang",
3658
+ "entities": [
3659
+ [6, 15, "SERVICE", "car rental"],
3660
+ [20, 28, "LOCATION", "nha trang"]
3661
+ ]
3662
+ },
3663
+ {
3664
+ "text": "ve tham quan chua bai dinh",
3665
+ "entities": [
3666
+ [4, 12, "SERVICE", "ticket"],
3667
+ [16, 28, "LOCATION", "bai dinh"]
3668
+ ]
3669
+ },
3670
+ {
3671
+ "text": "ks gan bien o phan thiet",
3672
+ "entities": [
3673
+ [0, 2, "SERVICE", "hotel"],
3674
+ [8, 17, "LOCATION", "phan thiet"]
3675
+ ]
3676
+ },
3677
+ {
3678
+ "text": "du lich mui ne 6 ngay 5 dem",
3679
+ "entities": [
3680
+ [4, 10, "SERVICE", "tour"],
3681
+ [14, 20, "LOCATION", "mui ne"]
3682
+ ]
3683
+ },
3684
+ {
3685
+ "text": "ve may bay di dubai",
3686
+ "entities": [
3687
+ [4, 13, "SERVICE", "flight"],
3688
+ [17, 21, "LOCATION", "dubai"]
3689
+ ]
3690
+ },
3691
+ {
3692
+ "text": "thue xe may o vung tau",
3693
+ "entities": [
3694
+ [6, 15, "SERVICE", "car rental"],
3695
+ [20, 29, "LOCATION", "vung tau"]
3696
+ ]
3697
+ },
3698
+ {
3699
+ "text": "ve tham quan lang bac",
3700
+ "entities": [
3701
+ [4, 12, "SERVICE", "ticket"],
3702
+ [16, 23, "LOCATION", "lang bac"]
3703
+ ]
3704
+ },
3705
+ {
3706
+ "text": "ks 5 sao o sai gon",
3707
+ "entities": [
3708
+ [0, 2, "SERVICE", "hotel"],
3709
+ [8, 14, "LOCATION", "sai gon"]
3710
+ ]
3711
+ },
3712
+ {
3713
+ "text": "du lich ninh binh 4 ngay 3 dem",
3714
+ "entities": [
3715
+ [4, 10, "SERVICE", "tour"],
3716
+ [14, 22, "LOCATION", "ninh binh"]
3717
+ ]
3718
+ },
3719
+ {
3720
+ "text": "ve may bay di tokyo",
3721
+ "entities": [
3722
+ [4, 13, "SERVICE", "flight"],
3723
+ [17, 22, "LOCATION", "tokyo"]
3724
+ ]
3725
+ },
3726
+ {
3727
+ "text": "thue xe hoi o ha noi",
3728
+ "entities": [
3729
+ [6, 15, "SERVICE", "car rental"],
3730
+ [20, 26, "LOCATION", "ha noi"]
3731
+ ]
3732
+ },
3733
+ {
3734
+ "text": "ve tham quan suoi nuoc nong",
3735
+ "entities": [
3736
+ [4, 12, "SERVICE", "ticket"],
3737
+ [16, 28, "LOCATION", "nuoc nong"]
3738
+ ]
3739
+ },
3740
+ {
3741
+ "text": "ks gan song han o da nang",
3742
+ "entities": [
3743
+ [0, 2, "SERVICE", "hotel"],
3744
+ [8, 14, "LOCATION", "da nang"]
3745
+ ]
3746
+ },
3747
+ {
3748
+ "text": "du lich phu quoc 7 ngay 6 dem",
3749
+ "entities": [
3750
+ [4, 10, "SERVICE", "tour"],
3751
+ [14, 23, "LOCATION", "phu quoc"]
3752
+ ]
3753
+ },
3754
+ {
3755
+ "text": "ve may bay di con dao",
3756
+ "entities": [
3757
+ [4, 13, "SERVICE", "flight"],
3758
+ [17, 25, "LOCATION", "con dao"]
3759
+ ]
3760
+ },
3761
+ {
3762
+ "text": "thue xe may o da lat",
3763
+ "entities": [
3764
+ [6, 15, "SERVICE", "car rental"],
3765
+ [20, 27, "LOCATION", "da lat"]
3766
+ ]
3767
+ },
3768
+ {
3769
+ "text": "ve tham quan vinh lan ha",
3770
+ "entities": [
3771
+ [4, 12, "SERVICE", "ticket"],
3772
+ [16, 26, "LOCATION", "lan ha"]
3773
+ ]
3774
+ },
3775
+ {
3776
+ "text": "ks gan san bay o sai gon",
3777
+ "entities": [
3778
+ [0, 2, "SERVICE", "hotel"],
3779
+ [8, 14, "LOCATION", "sai gon"]
3780
+ ]
3781
+ },
3782
+ {
3783
+ "text": "du lich ha long 5 ngay 4 dem",
3784
+ "entities": [
3785
+ [4, 10, "SERVICE", "tour"],
3786
+ [14, 21, "LOCATION", "ha long"]
3787
+ ]
3788
+ },
3789
+ {
3790
+ "text": "ve may bay di hue",
3791
+ "entities": [
3792
+ [4, 13, "SERVICE", "flight"],
3793
+ [17, 20, "LOCATION", "hue"]
3794
+ ]
3795
+ },
3796
+ {
3797
+ "text": "thue xe hoi o nha trang",
3798
+ "entities": [
3799
+ [6, 15, "SERVICE", "car rental"],
3800
+ [20, 28, "LOCATION", "nha trang"]
3801
+ ]
3802
+ },
3803
+ {
3804
+ "text": "ve tham quan di tich my son",
3805
+ "entities": [
3806
+ [4, 12, "SERVICE", "ticket"],
3807
+ [16, 29, "LOCATION", "my son"]
3808
+ ]
3809
+ },
3810
+ {
3811
+ "text": "ks gan bien o phu quoc",
3812
+ "entities": [
3813
+ [0, 2, "SERVICE", "hotel"],
3814
+ [8, 17, "LOCATION", "phu quoc"]
3815
+ ]
3816
+ }
3817
+ ]
3818
+ }