单词和句子的嵌入(Embeddings)是捕获语义含义的数值表示,允许机器以数学方式处理语言。 对于单词,嵌入通常使用在大型文本语料库上训练的神经网络创建。 一种常见的方法涉及 Word2Vec 算法,该算法通过预测句子中的周围单词 (Skip-Gram) 或从上下文中预测目标单词(连续词袋)来学习嵌入。 例如,经过训练后,“king”和“queen”之类的单词最终会具有相似的向量表示,因为它们出现在相似的上下文中。 另一种方法 GloVe 通过分析语料库中的全局单词共现统计信息来构建嵌入。 这捕获了“Paris - France + Italy ≈ Rome”之类的关系,其中向量运算反映了语义类比。
句子嵌入建立在单词级技术的基础上,但需要将单个单词向量组合成单个表示。 简单的方法是平均或求和句子中单词的嵌入,但这会丢失单词顺序和上下文。 更高级的方法使用像 BERT 或 Sentence-BERT 这样的模型,这些模型通过 transformer 架构处理整个句子。 例如,BERT 通过分析单词之间的双向关系来生成上下文嵌入,允许同一个单词(例如,“river bank”中的“bank”与“bank account”)根据上下文具有不同的表示。 Sentence-BERT 通过将输入传递到 Siamese 网络并针对语义相似性任务进行优化,来微调 BERT 以生成固定大小的句子嵌入。 这使得诸如在数据库中查找语义相关的句子之类的任务成为可能。
方法的选择取决于用例。 单词级嵌入适用于关键字匹配或词性标注等任务,而句子嵌入更适用于语义搜索或聚类。 诸如 Gensim(对于 Word2Vec)和 Hugging Face Transformers(对于 BERT)之类的工具提供了预训练模型和 API 来有效地生成嵌入。 例如,使用 gensim.models.Word2Vec
,开发人员可以在特定领域的数据上训练自定义嵌入,而 sentence-transformers
简化了仅用几行代码生成句子嵌入的过程。 这些技术通过将语言转换为机器可以计算的形式,构成了从聊天机器人到推荐系统的现代 NLP 应用程序的骨干。