首先,您似乎只有很少的训练数据(您提到的词汇量是649)。 BERT是一个庞大的模型,需要大量的训练数据。谷歌发布的英语模型至少在整个维基百科上都经过了培训。考虑一下!
我想知道是否可以使用我自己的标记化/分段文档(以及我自己的vocab文件)作为create_pretraining_data.py
脚本的输入文件(git源:https://github.com/google-research/bert)。
产生此问题的主要原因是,高棉语的细分/标记与英语不同。
Original: វាមានមកជាមួយនូវ Segmented/Tokenized: វា មាន មក ជាមួយ នូវ
我自己尝试了一些操作,并在运行
create_pretraining_data.py
和run_pretraining.py
脚本后设法获得了一些结果。但是,我不确定我在做什么可以被认为是正确的。
我还想知道验证模型所用的方法。
非常感谢您的帮助!
我所做的修改是:1.以列表格式制作输入文件
不是普通的纯文本,输入文件来自自定义的高棉标记化输出,然后将其制成列表格式,模仿了运行示例英语文本时得到的输出。
2.来自唯一分段词的Vocab文件[[['ដំណាំ', 'សាវម៉ាវ', 'ជា', 'ប្រភេទ', 'ឈើ', 'ហូប', 'ផ្លែ'], ['វា', 'ផ្តល់', 'ផប្រយោជន៍', 'យ៉ាង', 'ច្រើន', 'ដល់', 'សុខភាព']], [['cmt', '$', '270', 'នាំ', 'លាភ', 'នាំ', 'សំណាង', 'ហេង', 'ហេង']]]
*外括号表示源文件,第一个嵌套括号表示文档,第二个嵌套括号表示句子。与
all_documents
函数中的变量create_training_instances()
完全相同的结构
这是我真的非常怀疑的部分。要创建我的vocab文件,我要做的就是从整个文档中找到唯一的标记。然后,我添加核心令牌要求[CLS], [SEP], [UNK] and [MASK]
。我不确定这是否是正确的方法。
对此部分的反馈非常感谢!
3.跳过create_training_instances()函数中的标记化步骤因为我的输入文件已经与变量all_documents
匹配,所以我将第183行跳过到第207行。我将其替换为按原样读取输入:
for input_file in input_files: with tf.gfile.GFile(input_file, "r") as reader: lines = reader.read() all_documents = ast.literal_eval(lines)
结果/输出
原始输入文件(在自定义标记化之前)来自于随机网页抓取。
有关原始和vocab文件的某些信息:
Number of documents/articles: 5 Number of sentences: 78 Number of vocabs: 649 (including [CLS], [SEP] etc.)
下面是运行
create_pretraining_data.py
后的输出(末尾)
这是运行run_pretraining.py
后得到的结果>
如上图所示,我从中得到的准确性很低,因此如果我做得正确,我会很担心。
我想知道是否可以将我自己的标记化/分段文档(以及我自己的vocab文件)用作create_pretraining_data.py脚本的输入文件(git源:https:/ ...) >
首先,您似乎只有很少的训练数据(您提到的词汇量是649)。 BERT是一个庞大的模型,需要大量的训练数据。谷歌发布的英语模型至少在整个维基百科上都经过了培训。考虑一下!
BERT使用一种称为WordPiece的东西,可以保证固定的词汇量。稀有单词会像这样被拆分:Jet makers feud over seat width with big orders at stake
转换为wordPiece as:_J et _makers _fe ud _over _seat _width _with _big _orders _at _stake
。
WordPieceTokenizer.tokenize(text)
接受由空格预加符号的文本,因此您应更改BasicTokenizer,它由您的特定令牌生成器在WordPieceTokenizer之前运行,该令牌应按空格分隔令牌。要训练自己的WorPiece-Tookenizer,请看sentenePiece,它在bpe模式下与WordPiece基本相同。然后,您可以从WordPiece模型中导出词汇表。
我自己没有预先训练BERT模型,所以我无法帮助您准确更改代码中的内容。
首先,您似乎只有很少的训练数据(您提到的词汇量是649)。 BERT是一个庞大的模型,需要大量的训练数据。谷歌发布的英语模型至少在整个维基百科上都经过了培训。考虑一下!