【问题标题】:BERT sentence embeddings using pretrained models for Non-English text使用预训练模型的 BERT 句子嵌入非英语文本
【发布时间】:2020-10-29 15:19:41
【问题描述】:

我正在尝试应用BERT 句子嵌入来从瑞典语文本字符串的语料库中找到给定瑞典语文本片段的相似句子。 来自 sentence_transformers (SBERT) 的句子 BERT 似乎是理想的选择。他们有各种预训练模型,并给出了很好的例子: (https://github.com/UKPLab/sentence-transformers)

from sentence_transformers import SentenceTransformer, util
import torch

embedder = SentenceTransformer('distilbert-base-nli-stsb-mean-tokens')

sentences = ['This framework generates embeddings for each input sentence',
    'Sentences are passed as a list of string.', 
    'The quick brown fox jumps over the lazy dog.']
sentence_embeddings = model.encode(sentences)

然而,他们对非英语句子转换器的选择似乎有限。我想知道在提取句子嵌入方面应用专门针对瑞典文本或任何其他非英语语言训练的 Hugging Face 库中的 BERT 模型是否可能并且可能更准确?专门针对一种语言训练的 BERT 模型不会为该语言产生更准确的句子嵌入吗?最后,所有模型都使用它们各自的语言对相同的任务 MLM 和 NSP 进行了预训练,以理解该语言,对吗?

有什么想法或经验吗?

最终目标是在句子嵌入上使用余弦相似度来对相似的句子/段落进行排名

【问题讨论】:

    标签: python nlp cosine-similarity bert-language-model sentence-similarity


    【解决方案1】:

    在瑞典语中使用预训练的 BERT 确实要好得多。原因是瑞典语单词对于在英语语料库上训练的 BERT 来说都是异常值。因此,即使英语 BERT 可能会在瑞典语料库上做一些工作,如果可以的话,瑞典语 BERT 也是一个明显的选择。

    但是,如果您面临混合语言语料库的可能性,那么您就不能应用这种方法,因为您不仅需要为所涉及的每种语言使用单独的 BERT,还需要检测使用的语言,包括句内级别。在这种情况下,一个可能的解决方案是使用 Hugging Face 网络或任何公共翻译 API 将所有文本从“自动检测语言”翻译成英语。例如。谷歌、Deepl、Yandex 或百度。

    附:如果您碰巧同时尝试了这两种 BERT,您能否在此处的评论中分享质量差异

    【讨论】:

    • 您好安德鲁,感谢您的快速反应!您是否碰巧知道是否可以将 embedder = SentenceTransformer('....或者我应该从 Huggingface 库中获取一个预训练的瑞典模型,然后以某种方式自己提取嵌入?它需要微调的 BERT 吗?我只想对我的瑞典语句子进行语境化嵌入,并将它们与余弦相似度(无监督)进行比较。再次感谢:)
    • 这绝对是通过实验确定的。你手头都有吗?请同时尝试并报告质量
    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2021-05-13
    相关资源
    最近更新 更多