Công cụ tìm kiếm ngữ nghĩa và tính tương đồng đa ngôn ngữ với bộ mã hóa câu đa ngôn ngữ

Xem trên TensorFlow.org Chạy trong Google Colab Xem trên GitHub Tải xuống sổ ghi chép Xem mô hình TF Hub

Sổ tay này minh họa cách truy cập mô-đun Bộ mã hóa câu đa ngôn ngữ và sử dụng mô-đun này cho sự giống nhau của câu trên nhiều ngôn ngữ. Module này là một phần mở rộng của mô-đun mã hóa phổ gốc .

Cuốn sổ được chia như sau:

  • Phần đầu tiên cho thấy hình ảnh của các câu giữa các cặp ngôn ngữ. Đây là một bài tập mang tính học thuật hơn.
  • Trong phần thứ hai, chúng tôi trình bày cách xây dựng một công cụ tìm kiếm ngữ nghĩa từ một mẫu kho ngữ liệu Wikipedia bằng nhiều ngôn ngữ.

Trích dẫn

Các bài báo nghiên cứu sử dụng các mô hình được khám phá trong chuyên mục này nên trích dẫn:

Bộ mã hóa câu đa ngôn ngữ để truy xuất ngữ nghĩa

Yinfei Yang, Daniel Cer, Amin Ahmad, Mandy Guo, Jax Law, Noah Constant, Gustavo Hernandez Abrego, Steve Yuan, Chris Tar, Yun-Hsuan Sung, Brian Strope và Ray Kurzweil. 2019. arXiv preprint arXiv: 1907.04307

Thành lập

Phần này thiết lập môi trường để truy cập vào Mô-đun mã hóa câu đa ngôn ngữ và cũng chuẩn bị một tập hợp các câu tiếng Anh và bản dịch của chúng. Trong các phần sau, module đa ngôn ngữ sẽ được sử dụng để tính toán sự tương đồng giữa các ngôn ngữ.

Môi trường thiết lập

%%capture
# Install the latest Tensorflow version.
!pip install tensorflow_text
!pip install bokeh
!pip install simpleneighbors[annoy]
!pip install tqdm

Thiết lập các chức năng và nhập khẩu chung

import bokeh
import bokeh.models
import bokeh.plotting
import numpy as np
import os
import pandas as pd
import tensorflow.compat.v2 as tf
import tensorflow_hub as hub
from tensorflow_text import SentencepieceTokenizer
import sklearn.metrics.pairwise

from simpleneighbors import SimpleNeighbors
from tqdm import tqdm
from tqdm import trange

def visualize_similarity(embeddings_1, embeddings_2, labels_1, labels_2,
                         plot_title,
                         plot_width=1200, plot_height=600,
                         xaxis_font_size='12pt', yaxis_font_size='12pt'):

  assert len(embeddings_1) == len(labels_1)
  assert len(embeddings_2) == len(labels_2)

  # arccos based text similarity (Yang et al. 2019; Cer et al. 2019)
  sim = 1 - np.arccos(
      sklearn.metrics.pairwise.cosine_similarity(embeddings_1,
                                                 embeddings_2))/np.pi

  embeddings_1_col, embeddings_2_col, sim_col = [], [], []
  for i in range(len(embeddings_1)):
    for j in range(len(embeddings_2)):
      embeddings_1_col.append(labels_1[i])
      embeddings_2_col.append(labels_2[j])
      sim_col.append(sim[i][j])
  df = pd.DataFrame(zip(embeddings_1_col, embeddings_2_col, sim_col),
                    columns=['embeddings_1', 'embeddings_2', 'sim'])

  mapper = bokeh.models.LinearColorMapper(
      palette=[*reversed(bokeh.palettes.YlOrRd[9])], low=df.sim.min(),
      high=df.sim.max())

  p = bokeh.plotting.figure(title=plot_title, x_range=labels_1,
                            x_axis_location="above",
                            y_range=[*reversed(labels_2)],
                            plot_width=plot_width, plot_height=plot_height,
                            tools="save",toolbar_location='below', tooltips=[
                                ('pair', '@embeddings_1 ||| @embeddings_2'),
                                ('sim', '@sim')])
  p.rect(x="embeddings_1", y="embeddings_2", width=1, height=1, source=df,
         fill_color={'field': 'sim', 'transform': mapper}, line_color=None)

  p.title.text_font_size = '12pt'
  p.axis.axis_line_color = None
  p.axis.major_tick_line_color = None
  p.axis.major_label_standoff = 16
  p.xaxis.major_label_text_font_size = xaxis_font_size
  p.xaxis.major_label_orientation = 0.25 * np.pi
  p.yaxis.major_label_text_font_size = yaxis_font_size
  p.min_border_right = 300

  bokeh.io.output_notebook()
  bokeh.io.show(p)

Đây là mã soạn sẵn bổ sung nơi chúng tôi nhập mô hình ML được đào tạo trước mà chúng tôi sẽ sử dụng để mã hóa văn bản trong sổ ghi chép này.

# The 16-language multilingual module is the default but feel free
# to pick others from the list and compare the results.
module_url = 'https://tfhub.dev/google/universal-sentence-encoder-multilingual/3'

model = hub.load(module_url)

def embed_text(input):
  return model(input)

Hình dung sự giống nhau của văn bản giữa các ngôn ngữ

Với việc nhúng câu hiện có trong tay, chúng ta có thể hình dung sự giống nhau về ngữ nghĩa giữa các ngôn ngữ khác nhau.

Nhúng văn bản trên máy tính

Đầu tiên, chúng tôi xác định một tập hợp các câu được dịch song song sang các ngôn ngữ khác nhau. Sau đó, chúng tôi tính toán trước các lần nhúng cho tất cả các câu của chúng tôi.

# Some texts of different lengths in different languages.
arabic_sentences = ['كلب', 'الجراء لطيفة.', 'أستمتع بالمشي لمسافات طويلة على طول الشاطئ مع كلبي.']
chinese_sentences = ['狗', '小狗很好。', '我喜欢和我的狗一起沿着海滩散步。']
english_sentences = ['dog', 'Puppies are nice.', 'I enjoy taking long walks along the beach with my dog.']
french_sentences = ['chien', 'Les chiots sont gentils.', 'J\'aime faire de longues promenades sur la plage avec mon chien.']
german_sentences = ['Hund', 'Welpen sind nett.', 'Ich genieße lange Spaziergänge am Strand entlang mit meinem Hund.']
italian_sentences = ['cane', 'I cuccioli sono carini.', 'Mi piace fare lunghe passeggiate lungo la spiaggia con il mio cane.']
japanese_sentences = ['犬', '子犬はいいです', '私は犬と一緒にビーチを散歩するのが好きです']
korean_sentences = ['개', '강아지가 좋다.', '나는 나의 개와 해변을 따라 길게 산책하는 것을 즐긴다.']
russian_sentences = ['собака', 'Милые щенки.', 'Мне нравится подолгу гулять по пляжу со своей собакой.']
spanish_sentences = ['perro', 'Los cachorros son agradables.', 'Disfruto de dar largos paseos por la playa con mi perro.']

# Multilingual example
multilingual_example = ["Willkommen zu einfachen, aber", "verrassend krachtige", "multilingüe", "compréhension du langage naturel", "модели.", "大家是什么意思" , "보다 중요한", ".اللغة التي يتحدثونها"]
multilingual_example_in_en =  ["Welcome to simple yet", "surprisingly powerful", "multilingual", "natural language understanding", "models.", "What people mean", "matters more than", "the language they speak."]
# Compute embeddings.
ar_result = embed_text(arabic_sentences)
en_result = embed_text(english_sentences)
es_result = embed_text(spanish_sentences)
de_result = embed_text(german_sentences)
fr_result = embed_text(french_sentences)
it_result = embed_text(italian_sentences)
ja_result = embed_text(japanese_sentences)
ko_result = embed_text(korean_sentences)
ru_result = embed_text(russian_sentences)
zh_result = embed_text(chinese_sentences)

multilingual_result = embed_text(multilingual_example)
multilingual_in_en_result = embed_text(multilingual_example_in_en)

Hình dung sự giống nhau

Với tính năng nhúng văn bản trong tay, chúng ta có thể lấy sản phẩm chấm của chúng để hình dung mức độ tương tự của các câu giữa các ngôn ngữ. Màu tối hơn cho thấy các nhúng tương tự nhau về mặt ngữ nghĩa.

Sự giống nhau về đa ngôn ngữ

visualize_similarity(multilingual_in_en_result, multilingual_result,
                     multilingual_example_in_en, multilingual_example,  "Multilingual Universal Sentence Encoder for Semantic Retrieval (Yang et al., 2019)")

Sự tương đồng giữa tiếng Anh và tiếng Ả Rập

visualize_similarity(en_result, ar_result, english_sentences, arabic_sentences, 'English-Arabic Similarity')

Tương tự tiếng Anh-Nga

visualize_similarity(en_result, ru_result, english_sentences, russian_sentences, 'English-Russian Similarity')

Sự giống nhau giữa tiếng Anh và tiếng Tây Ban Nha

visualize_similarity(en_result, es_result, english_sentences, spanish_sentences, 'English-Spanish Similarity')

Tương tự Anh-Ý

visualize_similarity(en_result, it_result, english_sentences, italian_sentences, 'English-Italian Similarity')

Sự giống nhau giữa tiếng Ý và tiếng Tây Ban Nha

visualize_similarity(it_result, es_result, italian_sentences, spanish_sentences, 'Italian-Spanish Similarity')

Sự giống nhau giữa tiếng Anh và tiếng Trung

visualize_similarity(en_result, zh_result, english_sentences, chinese_sentences, 'English-Chinese Similarity')

Sự giống nhau giữa tiếng Anh và tiếng Hàn

visualize_similarity(en_result, ko_result, english_sentences, korean_sentences, 'English-Korean Similarity')

Sự tương đồng giữa Trung Quốc và Hàn Quốc

visualize_similarity(zh_result, ko_result, chinese_sentences, korean_sentences, 'Chinese-Korean Similarity')

Và nhiều hơn nữa...

Các ví dụ trên có thể được mở rộng cho bất kỳ cặp ngôn ngữ từ tiếng Anh, tiếng Ả Rập, Trung Quốc, Hà Lan, Pháp, Đức, Ý, Nhật Bản, Hàn Quốc, Ba Lan, Bồ Đào Nha, Nga, Tây Ban Nha, Thái Lan và Thổ Nhĩ Kỳ. Chúc bạn viết mã vui vẻ!

Tạo Công cụ Tìm kiếm Tương tự-Ngữ nghĩa Đa ngôn ngữ

Trong khi trong ví dụ trước, chúng ta đã hình dung một số ít các câu, trong phần này chúng ta sẽ xây dựng một chỉ mục tìm kiếm ngữ nghĩa gồm khoảng 200.000 câu từ Wikipedia Corpus. Khoảng một nửa sẽ bằng tiếng Anh và nửa còn lại bằng tiếng Tây Ban Nha để chứng minh khả năng đa ngôn ngữ của Bộ mã hóa câu đa năng.

Tải xuống dữ liệu để lập chỉ mục

Thứ nhất, chúng tôi sẽ tải câu tin tức trong bội ngôn ngữ từ Tin tức Nhận định Corpus [1]. Không làm mất đi tính tổng quát, cách tiếp cận này cũng sẽ hoạt động để lập chỉ mục phần còn lại của các ngôn ngữ được hỗ trợ.

Để tăng tốc bản trình diễn, chúng tôi giới hạn 1000 câu cho mỗi ngôn ngữ.

corpus_metadata = [
    ('ar', 'ar-en.txt.zip', 'News-Commentary.ar-en.ar', 'Arabic'),
    ('zh', 'en-zh.txt.zip', 'News-Commentary.en-zh.zh', 'Chinese'),
    ('en', 'en-es.txt.zip', 'News-Commentary.en-es.en', 'English'),
    ('ru', 'en-ru.txt.zip', 'News-Commentary.en-ru.ru', 'Russian'),
    ('es', 'en-es.txt.zip', 'News-Commentary.en-es.es', 'Spanish'),
]

language_to_sentences = {}
language_to_news_path = {}
for language_code, zip_file, news_file, language_name in corpus_metadata:
  zip_path = tf.keras.utils.get_file(
      fname=zip_file,
      origin='http://opus.nlpl.eu/download.php?f=News-Commentary/v11/moses/' + zip_file,
      extract=True)
  news_path = os.path.join(os.path.dirname(zip_path), news_file)
  language_to_sentences[language_code] = pd.read_csv(news_path, sep='\t', header=None)[0][:1000]
  language_to_news_path[language_code] = news_path

  print('{:,} {} sentences'.format(len(language_to_sentences[language_code]), language_name))
Downloading data from http://opus.nlpl.eu/download.php?f=News-Commentary/v11/moses/ar-en.txt.zip
24715264/24714354 [==============================] - 2s 0us/step
1,000 Arabic sentences
Downloading data from http://opus.nlpl.eu/download.php?f=News-Commentary/v11/moses/en-zh.txt.zip
18104320/18101984 [==============================] - 2s 0us/step
1,000 Chinese sentences
Downloading data from http://opus.nlpl.eu/download.php?f=News-Commentary/v11/moses/en-es.txt.zip
28106752/28106064 [==============================] - 2s 0us/step
1,000 English sentences
Downloading data from http://opus.nlpl.eu/download.php?f=News-Commentary/v11/moses/en-ru.txt.zip
24854528/24849511 [==============================] - 2s 0us/step
1,000 Russian sentences
1,000 Spanish sentences

Sử dụng mô hình được đào tạo trước để biến đổi câu thành vectơ

Chúng tôi tính toán embeddings theo để họ phù hợp với bộ nhớ RAM của GPU.

# Takes about 3 minutes

batch_size = 2048
language_to_embeddings = {}
for language_code, zip_file, news_file, language_name in corpus_metadata:
  print('\nComputing {} embeddings'.format(language_name))
  with tqdm(total=len(language_to_sentences[language_code])) as pbar:
    for batch in pd.read_csv(language_to_news_path[language_code], sep='\t',header=None, chunksize=batch_size):
      language_to_embeddings.setdefault(language_code, []).extend(embed_text(batch[0]))
      pbar.update(len(batch))
0%|          | 0/1000 [00:00<?, ?it/s]
Computing Arabic embeddings
83178it [00:30, 2768.60it/s]
  0%|          | 0/1000 [00:00<?, ?it/s]
Computing Chinese embeddings
69206it [00:18, 3664.60it/s]
  0%|          | 0/1000 [00:00<?, ?it/s]
Computing English embeddings
238853it [00:37, 6319.00it/s]
  0%|          | 0/1000 [00:00<?, ?it/s]
Computing Russian embeddings
190092it [00:34, 5589.16it/s]
  0%|          | 0/1000 [00:00<?, ?it/s]
Computing Spanish embeddings
238819it [00:41, 5754.02it/s]

Xây dựng chỉ mục các vectơ ngữ nghĩa

Chúng tôi sử dụng SimpleNeighbors thư viện --- mà là một wrapper cho làm phiền thư viện --- để hiệu quả tìm kiếm kết quả từ corpus.

%%time

# Takes about 8 minutes

num_index_trees = 40
language_name_to_index = {}
embedding_dimensions = len(list(language_to_embeddings.values())[0][0])
for language_code, zip_file, news_file, language_name in corpus_metadata:
  print('\nAdding {} embeddings to index'.format(language_name))
  index = SimpleNeighbors(embedding_dimensions, metric='dot')

  for i in trange(len(language_to_sentences[language_code])):
    index.add_one(language_to_sentences[language_code][i], language_to_embeddings[language_code][i])

  print('Building {} index with {} trees...'.format(language_name, num_index_trees))
  index.build(n=num_index_trees)
  language_name_to_index[language_name] = index
0%|          | 1/1000 [00:00<02:21,  7.04it/s]
Adding Arabic embeddings to index
100%|██████████| 1000/1000 [02:06<00:00,  7.90it/s]
  0%|          | 1/1000 [00:00<01:53,  8.84it/s]
Building Arabic index with 40 trees...

Adding Chinese embeddings to index
100%|██████████| 1000/1000 [02:05<00:00,  7.99it/s]
  0%|          | 1/1000 [00:00<01:59,  8.39it/s]
Building Chinese index with 40 trees...

Adding English embeddings to index
100%|██████████| 1000/1000 [02:07<00:00,  7.86it/s]
  0%|          | 1/1000 [00:00<02:17,  7.26it/s]
Building English index with 40 trees...

Adding Russian embeddings to index
100%|██████████| 1000/1000 [02:06<00:00,  7.91it/s]
  0%|          | 1/1000 [00:00<02:03,  8.06it/s]
Building Russian index with 40 trees...

Adding Spanish embeddings to index
100%|██████████| 1000/1000 [02:07<00:00,  7.84it/s]
Building Spanish index with 40 trees...
CPU times: user 11min 21s, sys: 2min 14s, total: 13min 35s
Wall time: 10min 33s

%%time

# Takes about 13 minutes

num_index_trees = 60
print('Computing mixed-language index')
combined_index = SimpleNeighbors(embedding_dimensions, metric='dot')
for language_code, zip_file, news_file, language_name in corpus_metadata:
  print('Adding {} embeddings to mixed-language index'.format(language_name))
  for i in trange(len(language_to_sentences[language_code])):
    annotated_sentence = '({}) {}'.format(language_name, language_to_sentences[language_code][i])
    combined_index.add_one(annotated_sentence, language_to_embeddings[language_code][i])

print('Building mixed-language index with {} trees...'.format(num_index_trees))
combined_index.build(n=num_index_trees)
0%|          | 1/1000 [00:00<02:00,  8.29it/s]
Computing mixed-language index
Adding Arabic embeddings to mixed-language index
100%|██████████| 1000/1000 [02:06<00:00,  7.92it/s]
  0%|          | 1/1000 [00:00<02:24,  6.89it/s]
Adding Chinese embeddings to mixed-language index
100%|██████████| 1000/1000 [02:05<00:00,  7.95it/s]
  0%|          | 1/1000 [00:00<02:05,  7.98it/s]
Adding English embeddings to mixed-language index
100%|██████████| 1000/1000 [02:06<00:00,  7.88it/s]
  0%|          | 1/1000 [00:00<02:18,  7.20it/s]
Adding Russian embeddings to mixed-language index
100%|██████████| 1000/1000 [02:04<00:00,  8.03it/s]
  0%|          | 1/1000 [00:00<02:17,  7.28it/s]
Adding Spanish embeddings to mixed-language index
100%|██████████| 1000/1000 [02:06<00:00,  7.90it/s]
Building mixed-language index with 60 trees...
CPU times: user 11min 18s, sys: 2min 13s, total: 13min 32s
Wall time: 10min 30s

Xác minh rằng công cụ tìm kiếm tương đồng ngữ nghĩa hoạt động

Trong phần này, chúng tôi sẽ chứng minh:

  1. Khả năng tìm kiếm ngữ nghĩa: truy xuất các câu từ kho ngữ liệu tương tự về ngữ nghĩa với truy vấn đã cho.
  2. Khả năng đa ngôn ngữ: làm như vậy bằng nhiều ngôn ngữ khi ngôn ngữ truy vấn và ngôn ngữ lập chỉ mục khớp với nhau
  3. Khả năng đa ngôn ngữ: đưa ra các truy vấn bằng một ngôn ngữ khác với kho ngữ liệu được lập chỉ mục
  4. Kho ngữ liệu hỗn hợp ngôn ngữ: tất cả những điều trên trên một chỉ mục duy nhất chứa các mục nhập từ tất cả các ngôn ngữ

Khả năng tìm kiếm ngữ nghĩa đa ngôn ngữ

Trong phần này, chúng tôi hướng dẫn cách lấy các câu liên quan đến một tập hợp các câu tiếng Anh mẫu. Những điều nên thử:

  • Hãy thử một vài câu mẫu khác nhau
  • Thử thay đổi số lượng kết quả trả về (chúng được trả về theo thứ tự tương tự)
  • Hãy thử khả năng cross-ngôn ngữ bằng cách trả lại kết quả bằng các ngôn ngữ khác nhau (có thể muốn sử dụng Google Translate trên một số kết quả sang ngôn ngữ mẹ đẻ của bạn để kiểm tra sự tỉnh táo)

English sentences similar to: "The stock market fell four points."
['Nobel laureate Amartya Sen attributed the European crisis to four failures – political, economic, social, and intellectual.',
 'Just last December, fellow economists Martin Feldstein and Nouriel Roubini each penned op-eds bravely questioning bullish market sentiment, sensibly pointing out gold’s risks.',
 'His ratings have dipped below 50% for the first time.',
 'As a result, markets were deregulated, making it easier to trade assets that were perceived to be safe, but were in fact not.',
 'Consider the advanced economies.',
 'But the agreement has three major flaws.',
 'This “predetermined equilibrium” thinking – reflected in the view that markets always self-correct – led to policy paralysis until the Great Depression, when John Maynard Keynes’s argument for government intervention to address unemployment and output gaps gained traction.',
 'Officials underestimated tail risks.',
 'Consider a couple of notorious examples.',
 'Stalin was content to settle for an empire in Eastern Europe.']

Khả năng tổng hợp hỗn hợp

Bây giờ chúng tôi sẽ đưa ra một truy vấn bằng tiếng Anh, nhưng kết quả sẽ đến từ bất kỳ ngôn ngữ nào được lập chỉ mục.

English sentences similar to: "The stock market fell four points."
['Nobel laureate Amartya Sen attributed the European crisis to four failures – political, economic, social, and intellectual.',
 'It was part of the 1945 consensus.',
 'The end of the East-West ideological divide and the end of absolute faith in markets are historical turning points.',
 'Just last December, fellow economists Martin Feldstein and Nouriel Roubini each penned op-eds bravely questioning bullish market sentiment, sensibly pointing out gold’s risks.',
 'His ratings have dipped below 50% for the first time.',
 'As a result, markets were deregulated, making it easier to trade assets that were perceived to be safe, but were in fact not.',
 'Consider the advanced economies.',
 'Since their articles appeared, the price of gold has moved up still further.',
 'But the agreement has three major flaws.',
 'Gold prices even hit a record-high $1,300 recently.',
 'This “predetermined equilibrium” thinking – reflected in the view that markets always self-correct – led to policy paralysis until the Great Depression, when John Maynard Keynes’s argument for government intervention to address unemployment and output gaps gained traction.',
 'What Failed in 2008?',
 'Officials underestimated tail risks.',
 'Consider a couple of notorious examples.',
 'One of these species, orange roughy, has been caught commercially for only around a quarter-century, but already is being fished to the point of collapse.',
 'Meanwhile, policymakers were lulled into complacency by the widespread acceptance of economic theories such as the “efficient-market hypothesis,” which assumes that investors act rationally and use all available information when making their decisions.',
 'Stalin was content to settle for an empire in Eastern Europe.',
 'Intelligence assets have been redirected.',
 'A new wave of what the economist Joseph Schumpeter famously called “creative destruction” is under way: even as central banks struggle to maintain stability by flooding markets with liquidity, credit to business and households is shrinking.',
 'It all came about in a number of ways.',
 'The UN, like the dream of European unity, was also part of the 1945 consensus.',
 'The End of 1945',
 'The Global Economy’s New Path',
 'But this scenario failed to materialize.',
 'Gold prices are extremely sensitive to global interest-rate movements.',
 'Fukushima has presented the world with a far-reaching, fundamental choice.',
 'It was Japan, the high-tech country par excellence (not the latter-day Soviet Union) that proved unable to take adequate precautions to avert disaster in four reactor blocks.',
 'Some European academics tried to argue that there was no need for US-like fiscal transfers, because any desired degree of risk sharing can, in theory, be achieved through financial markets.',
 '$10,000 Gold?',
 'One answer, of course, is a complete collapse of the US dollar.',
 '1929 or 1989?',
 'The goods we made were what economists call “rival" and “excludible" commodities.',
 'This dream quickly faded when the Cold War divided the world into two hostile blocs. But in some ways the 1945 consensus, in the West, was strengthened by Cold War politics.',
 'The first flaw is that the spending reductions are badly timed: coming as they do when the US economy is weak, they risk triggering another recession.',
 'One successful gold investor recently explained to me that stock prices languished for a more than a decade before the Dow Jones index crossed the 1,000 mark in the early 1980’s.',
 'Eichengreen traces our tepid response to the crisis to the triumph of monetarist economists, the disciples of Milton Friedman, over their Keynesian and Minskyite peers – at least when it comes to interpretations of the causes and consequences of the Great Depression.',
 "However, America's unilateral options are limited.",
 'Once it was dark, a screen was set up and Mark showed home videos from space.',
 'These aspirations were often voiced in the United Nations, founded in 1945.',
 'Then I got distracted for about 40 years.']

Hãy thử truy vấn của riêng bạn:

English sentences similar to: "The stock market fell four points."
['(Chinese) 新兴市场的号角',
 '(English) It was part of the 1945 consensus.',
 '(Russian) Брюссель. Цунами, пронёсшееся по финансовым рынкам, является глобальной катастрофой.',
 '(Arabic) هناك أربعة شروط مسبقة لتحقيق النجاح الأوروبي في أفغانستان:',
 '(Spanish) Su índice de popularidad ha caído por primera vez por debajo del 50 por ciento.',
 '(English) His ratings have dipped below 50% for the first time.',
 '(Russian) Впервые его рейтинг опустился ниже 50%.',
 '(English) As a result, markets were deregulated, making it easier to trade assets that were perceived to be safe, but were in fact not.',
 '(Arabic) وكانت التطورات التي شهدتها سوق العمل أكثر تشجيعا، فهي على النقيض من أسواق الأصول تعكس النتائج وليس التوقعات. وهنا أيضاً كانت الأخبار طيبة. فقد أصبحت سوق العمل أكثر إحكاما، حيث ظلت البطالة عند مستوى 3.5% وكانت نسبة الوظائف إلى الطلبات المقدمة فوق مستوى التعادل.',
 '(Russian) Это было частью консенсуса 1945 года.',
 '(English) Consider the advanced economies.',
 '(English) Since their articles appeared, the price of gold has moved up still further.',
 '(Russian) Тогда они не только смогут накормить свои семьи, но и начать получать рыночную прибыль и откладывать деньги на будущее.',
 '(English) Gold prices even hit a record-high $1,300 recently.',
 '(Chinese) 另一种金融危机',
 '(Russian) Европейская мечта находится в кризисе.',
 '(English) What Failed in 2008?',
 '(Spanish) Pero el acuerdo alcanzado tiene tres grandes defectos.',
 '(English) Officials underestimated tail risks.',
 '(English) Consider a couple of notorious examples.',
 '(Spanish) Los mercados financieros pueden ser frágiles y ofrecen muy poca capacidad de compartir los riesgos relacionados con el ingreso de los trabajadores, que constituye la mayor parte de la renta de cualquier economía avanzada.',
 '(Chinese) 2008年败在何处?',
 '(Spanish) Consideremos las economías avanzadas.',
 '(Spanish) Los bienes producidos se caracterizaron por ser, como señalaron algunos economistas, mercancías “rivales” y “excluyentes”.',
 '(Arabic) إغلاق الفجوة الاستراتيجية في أوروبا',
 '(English) Stalin was content to settle for an empire in Eastern Europe.',
 '(English) Intelligence assets have been redirected.',
 '(Spanish) Hoy, envalentonados por la apreciación continua, algunos están sugiriendo que el oro podría llegar incluso a superar esa cifra.',
 '(Russian) Цены на золото чрезвычайно чувствительны к мировым движениям процентных ставок.',
 '(Russian) Однако у достигнутой договоренности есть три основных недостатка.']

Các chủ đề khác

Đa ngôn ngữ

Cuối cùng, chúng tôi khuyến khích bạn thử truy vấn trong bất kỳ ngôn ngữ được hỗ trợ: Tiếng Anh, tiếng Ả Rập, Trung Quốc, Hà Lan, Pháp, Đức, Ý, Nhật Bản, Hàn Quốc, Ba Lan, Bồ Đào Nha, Nga, Tây Ban Nha, Thái Lan và Thổ Nhĩ Kỳ.

Ngoài ra, mặc dù chúng tôi chỉ lập chỉ mục trong một tập hợp con các ngôn ngữ, bạn cũng có thể lập chỉ mục nội dung bằng bất kỳ ngôn ngữ nào được hỗ trợ.

Các biến thể mô hình

Chúng tôi cung cấp các biến thể của các mô hình Bộ mã hóa đa năng được tối ưu hóa cho nhiều thứ khác nhau như bộ nhớ, độ trễ và / hoặc chất lượng. Vui lòng thử nghiệm với chúng để tìm một cái phù hợp.

Thư viện hàng xóm gần nhất

Chúng tôi đã sử dụng Annoy để tra cứu những người hàng xóm gần nhất một cách hiệu quả. Xem cân bằng phần đọc về số lượng cây (bộ nhớ phụ thuộc vào) và số hạng mục để tìm kiếm (độ trễ phụ thuộc vào) --- SimpleNeighbors chỉ cho phép để kiểm soát số lượng cây cối, nhưng refactoring mã để sử dụng làm phiền trực tiếp nên đơn giản, chúng tôi chỉ muốn giữ cho mã này càng đơn giản càng tốt cho người dùng phổ thông.

Nếu làm phiền không quy mô cho các ứng dụng của bạn, vui lòng kiểm tra FAISS .

Tất cả những gì tốt nhất để xây dựng các ứng dụng ngữ nghĩa đa ngôn ngữ của bạn!

[1] J. Tiedemann năm 2012, song song dữ liệu, Công cụ và giao diện trong OPUS . Trong Kỷ yếu của Hội nghị Quốc tế về Đánh giá và Nguồn lực Ngôn ngữ lần thứ 8 (LREC 2012)