预测句子中的缺失词 - 自然语言处理模型 [关闭]

Posted

技术标签:

【中文标题】预测句子中的缺失词 - 自然语言处理模型 [关闭]【英文标题】:Predicting Missing Words in a sentence - Natural Language Processing Model [closed] 【发布时间】:2019-07-25 11:34:27 【问题描述】:

我有下面这句话:

I want to ____ the car because it is cheap.

我想使用 NLP 模型预测丢失的单词。我应该使用什么 NLP 模型?谢谢。

【问题讨论】:

【参考方案1】:

TL;DR

试试这个:https://github.com/huggingface/pytorch-pretrained-BERT

首先你必须正确地设置它

pip install -U pytorch-pretrained-bert

然后您可以使用 BERT 算法中的“掩码语言模型”,例如

import torch
from pytorch_pretrained_bert import BertTokenizer, BertModel, BertForMaskedLM

# OPTIONAL: if you want to have more information on what's happening, activate the logger as follows
import logging
logging.basicConfig(level=logging.INFO)

# Load pre-trained model tokenizer (vocabulary)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

text = '[CLS] I want to [MASK] the car because it is cheap . [SEP]'
tokenized_text = tokenizer.tokenize(text)
indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)

# Create the segments tensors.
segments_ids = [0] * len(tokenized_text)

# Convert inputs to PyTorch tensors
tokens_tensor = torch.tensor([indexed_tokens])
segments_tensors = torch.tensor([segments_ids])

# Load pre-trained model (weights)
model = BertForMaskedLM.from_pretrained('bert-base-uncased')
model.eval()

# Predict all tokens
with torch.no_grad():
    predictions = model(tokens_tensor, segments_tensors)

predicted_index = torch.argmax(predictions[0, masked_index]).item()
predicted_token = tokenizer.convert_ids_to_tokens([predicted_index])[0]

print(predicted_token)

[出]:

buy

长期

要真正理解为什么需要[CLS][MASK] 和分段张量,请仔细阅读论文https://arxiv.org/abs/1810.04805

如果你很懒,可以阅读 Lilian Weng 的这篇精彩博文,https://lilianweng.github.io/lil-log/2019/01/31/generalized-language-models.html

除了 BERT,还有很多其他模型可以完成填空任务。请查看pytorch-pretrained-BERT 存储库中的其他模型,但更重要的是深入研究“语言建模”的任务,即根据历史预测下一个单词的任务。

【讨论】:

直截了当的回答,但您忘记创建 masked_index 导致接近尾声的错误。我假设masked_index 只是[MASK] 的索引? BERT 中的掩码不是填充(通常发生在序列的开头/结尾)=) 阅读 BERT 论文了解更多信息。 请添加以下代码``` masked_index = tokenized_text.index('[MASK]') ``` 另一个更正:因为你有一个 3d 张量,你实际上应该这样做: "predicted_index = torch.argmax(predictions[0][0][masked_index]).item()" 另外,考虑@比兰奇评论。都是这样工作的! 新版本的hugginface库被称为transformers,所以不用安装pytorch-uncased-bert,可以通过pip install transformers来获取最新版本。第二个导入行变为from transformers import ....【参考方案2】:

您可以使用许多模型。但我认为最近用于此类序列学习问题的模型是双向 RNN(如双向 LSTM),您可以从here得到提示

但请注意,双向 RNN 的训练成本非常高。根据您要解决的问题,我强烈建议使用一些预先训练的模型。 祝你好运!

【讨论】:

以上是关于预测句子中的缺失词 - 自然语言处理模型 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

实验一:训练Bigram模型并预测句子概率|自然语言

53-R语言中缺失值处理方法

R语言缺失值的处理——回归预测法

R语言构建文本分类模型:文本数据预处理构建词袋模型(bag of words)构建xgboost文本分类模型xgboost模型预测推理并使用混淆矩阵评估模型可视化模型预测的概率分布

自然语言处理之HMM模型分词

NLP_统计语言模型