Языковые модели являются одной из наиболее важных частей обработки естественного языка. Здесь, в этом блоге, я внедряю самые простые из языковых моделей. Модель, реализованная здесь, представляет собой «модель статистического языка». Я использовал «Bigrams», так что это известно как Bigram Language Model Анкет
В модели Language Bigram мы находим Bigrams, что означает два слова, объединяющихся в корпусе (вся коллекция слов/предложений).
Например –
В предложении «Дев потрясающий и удобный для пользователя», Биграмы:
«Dev Is», «это потрясающе», «потрясающе и« »,« и пользователь »,« удобный для пользователя »
В этом коде readdata () Функция принимает четыре предложения, которые формируют корпус. Предложения есть
- Это собака
- Это кот
- я люблю своего кота
- Это мое имя
и эти предложения разделены, чтобы найти атомные слова, которые образуют Словарь Анкет
Тогда есть функция CreateBigram () который находит всех возможных биграм, словарь биграмсов и негров, а также их частоту, то есть сколько раз они встречаются в корпусе.
Тогда функция Calcbigramprob () используется для расчета вероятности каждого биграма. Формула, для которой
Это с точки зрения вероятности, мы затем используем счет, чтобы найти вероятность. Который в основном
Затем мы используем эти вероятности, чтобы найти вероятность следующего слова, используя правило цепи, или мы находим вероятность предложения, как мы использовали в этой программе. Мы находим вероятность предложения “Это моя кошка” в программе, приведенной ниже.
def readData(): data = ['This is a dog','This is a cat','I love my cat','This is my name '] dat=[] for i in range(len(data)): for word in data[i].split(): dat.append(word) print(dat) return dat def createBigram(data): listOfBigrams = [] bigramCounts = {} unigramCounts = {} for i in range(len(data)-1): if i < len(data) - 1 and data[i+1].islower(): listOfBigrams.append((data[i], data[i + 1])) if (data[i], data[i+1]) in bigramCounts: bigramCounts[(data[i], data[i + 1])] += 1 else: bigramCounts[(data[i], data[i + 1])] = 1 if data[i] in unigramCounts: unigramCounts[data[i]] += 1 else: unigramCounts[data[i]] = 1 return listOfBigrams, unigramCounts, bigramCounts def calcBigramProb(listOfBigrams, unigramCounts, bigramCounts): listOfProb = {} for bigram in listOfBigrams: word1 = bigram[0] word2 = bigram[1] listOfProb[bigram] = (bigramCounts.get(bigram))/(unigramCounts.get(word1)) return listOfProb if __name__ == '__main__': data = readData() listOfBigrams, unigramCounts, bigramCounts = createBigram(data) print("\n All the possible Bigrams are ") print(listOfBigrams) print("\n Bigrams along with their frequency ") print(bigramCounts) print("\n Unigrams along with their frequency ") print(unigramCounts) bigramProb = calcBigramProb(listOfBigrams, unigramCounts, bigramCounts) print("\n Bigrams along with their probability ") print(bigramProb) inputList="This is my cat" splt=inputList.split() outputProb1 = 1 bilist=[] bigrm=[] for i in range(len(splt) - 1): if i < len(splt) - 1: bilist.append((splt[i], splt[i + 1])) print("\n The bigrams in given sentence are ") print(bilist) for i in range(len(bilist)): if bilist[i] in bigramProb: outputProb1 *= bigramProb[bilist[i]] else: outputProb1 *= 0 print('\n' + 'Probablility of sentence \"This is my cat\" = ' + str(outputProb1))
Выход
[‘This’, ‘is’, ‘a’, ‘Dog’, ‘this’, ‘is’, ‘a’, ‘cat’, ‘i’, ‘love’, ‘my’, ‘cat’, ‘ Это мое имя’]
Все возможные Bigrams – [(«this ‘,’ is ‘), (‘ is ‘,’ a ‘), (‘ a ‘,’ dog ‘), (‘ this ‘,’ is ‘), (‘ is ‘ , ‘a’), (‘a’, ‘cat’), (‘i’, ‘love’), (‘love’, ‘my’), (‘my’, ‘cat’), (‘это’ , ‘is’), (‘is’, ‘my’), (‘my’, ‘name’)]
Bigrams вместе с их частотой {(‘this’, ‘is’): 3, (‘is’, ‘a’): 2, (‘a’, ‘dog’): 1, (‘a’, ‘cat’ ): 1, (‘i’, ‘love’): 1, (‘love’, ‘my’): 1, (‘my’, ‘cat’): 1, (‘is’, ‘my’): 1, (‘my’, ‘name’): 1}
Unigrams вместе с их частотой {‘this’: 3, ‘is’: 3, ‘a’: 2, ‘dog’: 1, ‘cat’: 2, ‘i’: 1, ‘love’: 1, ‘my ‘: 2}
Bigrams вместе с их вероятностью {(‘this’, ‘is’): 1.0, (‘is’, ‘a’): 0,6666666666666666, (‘a’, ‘dog’): 0,5, (‘a’, ‘cat’ ): 0,5, (‘i’, ‘love’): 1.0, (‘love’, ‘my’): 1.0, (‘my’, ‘cat’): 0,5, (‘is’, ‘my’): 0,33333333333333333, (‘my’, ‘name’): 0,5}
Биграмс в данном предложении: [(«this ‘,’ is ‘), (‘ is ‘,’ my ‘), (« my’, ‘cat’)]]]
Вероятность приговора “Это my.1666666666666666
Проблема с этим типом языковой модели заключается в том, что если мы увеличим N в N-граммах, она станет интенсивным вычислением, и если мы уменьшаем N, то долгосрочные зависимости не принимаются во внимание. Также, если в предложении появляется неизвестное слово, вероятность становится 0. Эта проблема нулевой вероятности может быть решена с помощью метода, известного как сглаживание. В сглаживании мы также назначаем некоторую вероятность неизвестным словам. Два очень известных метода сглаживания
- Лаплас сглаживание
- Хороший Тьюринг
Это простое введение в мир моделей статистического языка. Я старался изо всех сил, чтобы объяснить модель Bigram.
Оригинал: “https://dev.to/amananandrai/language-model-implementation-bigram-model-22ij”