Edv*_*Beq 3 python nlp machine-learning bert-language-model huggingface-transformers
我有一个用于情绪分析的小数据集。Bert分类器将是一个简单的 KNN,但我想从库中获取模型的词嵌入transformers。请注意,我刚刚发现这个库 - 我仍在学习。
因此,查看在线示例,我试图了解从模型返回的尺寸。
例子:
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
tokens = tokenizer.encode(["Hello, my dog is cute", "He is really nice"])
print(tokens)
tokens = tokenizer.encode("Hello, my dog is cute", "He is really nice")
print(tokens)
tokens = tokenizer.encode(["Hello, my dog is cute"])
print(tokens)
tokens = tokenizer.encode("Hello, my dog is cute")
print(tokens)
Run Code Online (Sandbox Code Playgroud)
输出如下:
[101, 100, 100, 102]
[101, 7592, 1010, 2026, 3899, 2003, 10140, 102, 2002, 2003, 2428, 3835, 102]
[101, 100, 102]
[101, 7592, 1010, 2026, 3899, 2003, 10140, 102]
Run Code Online (Sandbox Code Playgroud)
我似乎找不到相关文档encode()- 我不知道为什么当输入作为列表传递时它会返回不同的内容。这是在做什么?
此外,是否有一种方法可以传递单词令牌并获取实际单词 - 来解决上述问题?
先感谢您
您可以调用tokenizer.convert_ids_to_tokens()来获取 id 的实际令牌:
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
tokens = []
tokens.append(tokenizer.encode(["Hello, my dog is cute", "He is really nice"]))
tokens.append(tokenizer.encode("Hello, my dog is cute", "He is really nice"))
tokens.append(tokenizer.encode(["Hello, my dog is cute"]))
tokens.append(tokenizer.encode("Hello, my dog is cute"))
for t in tokens:
print(tokenizer.convert_ids_to_tokens(t))
Run Code Online (Sandbox Code Playgroud)
输出:
['[CLS]', '[UNK]', '[UNK]', '[SEP]']
['[CLS]', 'hello', ',', 'my', 'dog', 'is', 'cute', '[SEP]', 'he', 'is', 'really', 'nice', '[SEP]']
['[CLS]', '[UNK]', '[SEP]']
['[CLS]', 'hello', ',', 'my', 'dog', 'is', 'cute', '[SEP]']
Run Code Online (Sandbox Code Playgroud)
正如您在这里所看到的,您的每个输入都被标记化,并且根据您的模型 (bert) 添加了特殊标记。编码函数没有正确处理您的列表,这可能是一个错误或预期的行为,具体取决于您如何定义它,因为它们是一种批处理方法batch_encode_plus:
['[CLS]', '[UNK]', '[UNK]', '[SEP]']
['[CLS]', 'hello', ',', 'my', 'dog', 'is', 'cute', '[SEP]', 'he', 'is', 'really', 'nice', '[SEP]']
['[CLS]', '[UNK]', '[SEP]']
['[CLS]', 'hello', ',', 'my', 'dog', 'is', 'cute', '[SEP]']
Run Code Online (Sandbox Code Playgroud)
输出:
{'input_ids': [[101, 7592, 1010, 2026, 3899, 2003, 10140, 102], [101, 2002, 2003, 2428, 3835, 102]]}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么编码方法没有记录,但可能是huggingface希望我们直接使用call方法:
tokenizer.batch_encode_plus(["Hello, my dog is cute", "He is really nice"], return_token_type_ids=False, return_attention_mask=False)
Run Code Online (Sandbox Code Playgroud)
输出:
[{'input_ids': [[101, 7592, 1010, 2026, 3899, 2003, 10140, 102], [101, 2002, 2003, 2428, 3835, 102]]}, {'input_ids': [101, 7592, 1010, 2026, 3899, 2003, 10140, 102, 2002, 2003, 2428, 3835, 102]}, {'input_ids': [[101, 7592, 1010, 2026, 3899, 2003, 10140, 102]]}, {'input_ids': [101, 7592, 1010, 2026, 3899, 2003, 10140, 102]}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5575 次 |
| 最近记录: |