Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Mehrsprachige Ähnlichkeit und semantische Suchmaschine mit mehrsprachigem Universal-Satzcodierer

Ansicht auf TensorFlow.org Führen Sie in Google Colab aus Quelle auf GitHub anzeigen Notizbuch herunterladen

Dieses Notizbuch zeigt, wie Sie auf das Modul Mehrsprachiger universeller Satzcodierer zugreifen und es für die Satzähnlichkeit in mehreren Sprachen verwenden können. Dieses Modul ist eine Erweiterung des ursprünglichen Universal Encoder-Moduls .

Das Notizbuch ist wie folgt unterteilt:

  • Der erste Abschnitt zeigt eine Visualisierung von Sätzen zwischen zwei Sprachen. Dies ist eine akademischere Übung.
  • Im zweiten Abschnitt zeigen wir, wie eine semantische Suchmaschine aus einem Beispiel eines Wikipedia-Korpus in mehreren Sprachen erstellt wird.

Zitat

Forschungsarbeiten, die die in diesem Colab untersuchten Modelle verwenden, sollten Folgendes zitieren:

Mehrsprachiger universeller Satzcodierer zum semantischen Abrufen

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

Konfiguration

In diesem Abschnitt wird die Umgebung für den Zugriff auf das mehrsprachige Universal-Satzcodierermodul eingerichtet und eine Reihe von englischen Sätzen und deren Übersetzungen vorbereitet. In den folgenden Abschnitten wird das mehrsprachige Modul verwendet, um die Ähnlichkeit zwischen Sprachen zu berechnen.

%%capture

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

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)

Dies ist ein zusätzlicher Boilerplate-Code, in den wir das vorab trainierte ML-Modell importieren, mit dem wir Text in diesem Notizbuch codieren.

# 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)

Visualisieren Sie die Textähnlichkeit zwischen Sprachen

Mit den jetzt vorliegenden Satzeinbettungen können wir die semantische Ähnlichkeit zwischen verschiedenen Sprachen visualisieren.

Berechnen von Texteinbettungen

Wir definieren zunächst eine Reihe von Sätzen, die parallel in verschiedene Sprachen übersetzt wurden. Dann berechnen wir die Einbettungen für alle unsere Sätze vor.

# 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)

Ähnlichkeit visualisieren

Mit Texteinbettungen in der Hand können wir ihr Punktprodukt verwenden, um zu visualisieren, wie ähnlich Sätze zwischen Sprachen sind. Eine dunklere Farbe zeigt an, dass die Einbettungen semantisch ähnlich sind.

Mehrsprachige Ähnlichkeit

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)")

Englisch-arabische Ähnlichkeit

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

Englisch-russische Ähnlichkeit

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

Englisch-spanische Ähnlichkeit

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

Englisch-italienische Ähnlichkeit

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

Italienisch-spanische Ähnlichkeit

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

Englisch-chinesische Ähnlichkeit

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

Englisch-Koreanische Ähnlichkeit

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

Chinesisch-koreanische Ähnlichkeit

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

Und mehr...

Die obigen Beispiele können auf jedes Sprachpaar aus Englisch, Arabisch, Chinesisch, Niederländisch, Französisch, Deutsch, Italienisch, Japanisch, Koreanisch, Polnisch, Portugiesisch, Russisch, Spanisch, Thailändisch und Türkisch erweitert werden . Viel Spaß beim Codieren!

Erstellen einer mehrsprachigen Suchmaschine für semantische Ähnlichkeit

Während wir im vorherigen Beispiel eine Handvoll Sätze visualisiert haben, erstellen wir in diesem Abschnitt einen semantischen Suchindex von etwa 200.000 Sätzen aus einem Wikipedia-Korpus. Etwa die Hälfte wird auf Englisch und die andere Hälfte auf Spanisch sein, um die mehrsprachigen Fähigkeiten des Universal Satzcodierers zu demonstrieren.

Laden Sie die Daten in den Index herunter

Zunächst werden wir Nachrichtensätze in mehreren Sprachen aus dem News Commentary Corpus [1] herunterladen. Ohne Verlust der Allgemeinheit sollte dieser Ansatz auch für die Indizierung der übrigen unterstützten Sprachen funktionieren.

Um die Demo zu beschleunigen, beschränken wir uns auf 1000 Sätze pro Sprache.

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

Verwenden eines vorab trainierten Modells, um Sätze in Vektoren umzuwandeln

Wir berechnen Einbettungen in Stapeln, damit sie in den RAM der GPU passen.

# 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]

Erstellen eines Index semantischer Vektoren

Wir verwenden die SimpleNeighbors- Bibliothek - ein Wrapper für die Annoy- Bibliothek -, um die Ergebnisse des Korpus effizient nachzuschlagen .

%%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

Stellen Sie sicher, dass die Suchmaschine für semantische Ähnlichkeit funktioniert

In diesem Abschnitt werden wir demonstrieren:

  1. Semantische Suchfunktionen: Abrufen von Sätzen aus dem Korpus, die der angegebenen Abfrage semantisch ähnlich sind.
  2. Mehrsprachige Funktionen: Dies geschieht in mehreren Sprachen, wenn Abfragesprache und Indexsprache übereinstimmen
  3. Sprachübergreifende Funktionen: Abfragen in einer anderen Sprache als im indizierten Korpus
  4. Korpus in gemischten Sprachen: Alle oben genannten Informationen in einem einzigen Index, der Einträge aus allen Sprachen enthält

Mehrsprachige Funktionen für die semantische Suche

In diesem Abschnitt zeigen wir, wie Sie Sätze abrufen, die sich auf eine Reihe von englischen Beispielsätzen beziehen. Dinge zu versuchen:

  • Probieren Sie ein paar verschiedene Beispielsätze aus
  • Versuchen Sie, die Anzahl der zurückgegebenen Ergebnisse zu ändern (sie werden in der Reihenfolge ihrer Ähnlichkeit zurückgegeben).
  • Probieren Sie mehrsprachige Funktionen aus, indem Sie Ergebnisse in verschiedenen Sprachen zurückgeben (möglicherweise möchten Sie Google Translate für einige Ergebnisse in Ihrer Muttersprache zur Überprüfung der Integrität verwenden).
sample_query = 'The stock market fell four points.'  
index_language = 'English'  
num_results = 10  

query_embedding = embed_text(sample_query)[0]
search_results = language_name_to_index[index_language].nearest(query_embedding, n=num_results)

print('{} sentences similar to: "{}"\n'.format(index_language, sample_query))
search_results
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.']

Mixed-Corpus-Funktionen

Wir werden jetzt eine Abfrage auf Englisch ausgeben, aber die Ergebnisse stammen aus einer der indizierten Sprachen.

sample_query = 'The stock market fell four points.'  
num_results = 40  

query_embedding = embed_text(sample_query)[0]
search_results = language_name_to_index[index_language].nearest(query_embedding, n=num_results)

print('{} sentences similar to: "{}"\n'.format(index_language, sample_query))
search_results
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.']

Probieren Sie Ihre eigenen Fragen aus:

query = 'The stock market fell four points.'  
num_results = 30  

query_embedding = embed_text(sample_query)[0]
search_results = combined_index.nearest(query_embedding, n=num_results)

print('{} sentences similar to: "{}"\n'.format(index_language, query))
search_results
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) Однако у достигнутой договоренности есть три основных недостатка.']

Weitere Themen

Mehrsprachig

Abschließend empfehlen wir Ihnen, Fragen in einer der unterstützten Sprachen zu beantworten: Englisch, Arabisch, Chinesisch, Niederländisch, Französisch, Deutsch, Italienisch, Japanisch, Koreanisch, Polnisch, Portugiesisch, Russisch, Spanisch, Thailändisch und Türkisch .

Auch wenn wir nur in einer Teilmenge der Sprachen indiziert haben, können Sie Inhalte auch in jeder der unterstützten Sprachen indizieren.

Modellvarianten

Wir bieten Variationen der Universal Encoder-Modelle an, die für verschiedene Dinge wie Speicher, Latenz und / oder Qualität optimiert sind. Bitte zögern Sie nicht, mit ihnen zu experimentieren, um eine geeignete zu finden.

Bibliotheken der nächsten Nachbarn

Wir haben Annoy verwendet, um die nächsten Nachbarn effizient aufzusuchen. Im Abschnitt zu Kompromissen finden Sie Informationen zur Anzahl der Bäume (speicherabhängig) und zur Anzahl der zu durchsuchenden Elemente (latenzabhängig). --- SimpleNeighbors ermöglicht nur die Steuerung der Anzahl der Bäume, die Umgestaltung des Codes für die direkte Verwendung von Annoy sollte jedoch erfolgen einfach, wir wollten diesen Code nur für den allgemeinen Benutzer so einfach wie möglich halten.

Wenn Annoy für Ihre Bewerbung nicht skaliert, lesen Sie bitte auch FAISS .

Alles Gute zum Erstellen Ihrer mehrsprachigen semantischen Anwendungen!

[1] J. Tiedemann, 2012, Parallele Daten, Tools und Schnittstellen in OPUS . In Proceedings der 8. Internationalen Konferenz über Sprachressourcen und Evaluation (LREC 2012)