ПредыдущийПредставлена базовая задача ner.Эта статья продолжает знакомство с CRF и, наконец, использует Bert для реализации задачи ner.
1. ОФО
Сначала рассмотрим две диаграммы.
Рисунок 1 — это Bilstm, т.е.ПредыдущийПредставленная модель, рис. 2, представляет собой BiLstm+CRF. Сравнивая два рисунка, нетрудно обнаружить, что между метками на рисунке 2 также существует связь пути, которая является уровнем CRF. Роль CRF здесь заключается в моделировании вероятности перехода между тегами, а затем выборе оптимального результата (называемого оптимальным путем на графе вероятностей) среди всех последовательностей тегов. того, за которым следует существительное, относительно высок, поэтому модель более склонна выбирать существительное после прилагательного.
Сеть BiLstm+CRF предназначена для ввода вывода Bilstm, то есть значения соответствующей метки каждого слова (обратите внимание, что вывод BiLstm не рекомендуется использовать для преобразования sigmoid, tanh или softmax) в CRF. Внутри CRF сначала будет случайным образом инициализирована матрица A размером [tag_size, tag_size], а tag_size — это количество тегов, поэтому AijОн представляет собой вероятность перехода с метки i на метку j. Эта матрица в конечном итоге получается путем обучения.
С помощью этой матрицы мы можем рассчитать оценку для последовательности меток.
Здесь X — предложение, которое мы наблюдали, например: Лю Юань поступил в университет Цинхуа. y — последовательность меток X. T представляет длину нашего предложения,Он представляет собой значение метки в момент времени t-1, переданное метке в момент времени t, полученное из матрицы переноса метки A,
— выходное значение BiLstm в момент времени t. так что это так просто, оценка последовательности меток может быть получена простым сложением. Но обратите внимание здесь
это оценка, а не значение вероятности. Для преобразования оценок в вероятности необходимо использовать следующую формулу.
здесьтекущее предложение
Все последовательности тегов, соответствующие
из
Сумма. Предположение
содержит 10 слов, задание имеет 3 ярлыка,
тип последовательности тегов.
Далее посмотрим, как тренироваться,для заявления
иметь последовательность ответов
, мы находим оценку последовательности ответов y, используем softmax, чтобы получить ее вероятность, и, наконец, используем оценку максимального правдоподобия для решения, то есть минимизируем следующую функцию потерь:
Упростите приведенную ниже формулу:
здесьпоследовательность меток ответов
Соответствующий балл, это легко посчитать, вот беда
Как рассчитать. На самом деле, не беспокойтесь здесь слишком сильно, потому что мы просим только
Можно найти значения всех последовательностей во времени
Стоимость всех последовательностей на данный момент.
Ниже приводится краткое описание:
Предположим, наш
всего два слова, поэтому
можно разобрать на
мы используем
и
представлять
так
и
Введите исходную формулу, чтобы получить
А значения всех последовательностей в момент времени s1 точно
Итак, чтобы спросить
, нам нужно только вычислить общее значение последовательности в каждый момент времени.
вышеBidirectional LSTM-CRF Models for Sequence TaggingМетод CRF упоминается в этой статье, но это не вся CRF.Для полного понимания CRF требуется знание вероятностных графических моделей, которые будут подробно представлены позже.
2, статьи кода
Использовать CRF в тензорном потоке очень удобно, потому что тензорный поток полностью инкапсулирован, и можно вызвать один метод.
log_likelihood, trans = tf.contrib.crf.crf_log_likelihood(
inputs=logits, # logits 就是Bilstm的输出,每个token对应的标签值,[batch_size,seq_len,tag_num]
tag_indices=self.labels,# 每个token对应的真实标签
sequence_lengths=self.lengths)# 每个样本的句子长度
log_likelihood, возвращаемый методом, — это соответствующее значение потерь, а trans — матрица перехода метки. При построении train_op обратите внимание, что tf.reduce_mean(-log_likelihood) требуется для градиентного спуска.
train_op = tf.train.AdamOptimizer(learning_rate).minimize(tf.reduce_mean(-log_likelihood))
####Этап предсказания
Предсказание состоит в том, чтобы найти ту, у которой самый большой балл среди всех последовательностей меток. Здесь используется алгоритм Витерби, а также запакован tensorflow.
decode_tags, best_score= tf.contrib.crf.crf_decode(potentials=logits, transition_params=trans, sequence_length=self.lengths)
входить:
logits
: это результат Bilstm, который представляет собой оценку каждого слова для каждой метки.transition_params
: Матрица вероятности перехода метки, обученная CRF.sequence_length
: Длина предложения прогнозируемой выборки.
возвращение:
decode_tags
: Прогнозируемая оптимальная последовательность меток.
best_score
: оценка, соответствующая предсказанной оптимальной последовательности меток.
3 Bert-Bilstm-CRF
существуетПодробное объяснение использования BERT (реальный бой)Введено использование Берта, вы можете посмотреть на него. Для Bert-Bilstm-CRF вывод Bert можно рассматривать как вектор слов, поэтому просто замените часть исходного вектора слов на bert.
Исходный код отправленGIT