Рубрики
Без рубрики

Реализация языковой модели (модель Bigram)

Языковые модели являются одной из наиболее важных частей обработки естественного языка. Здесь, в этом блоге … Tagged с помощью машинного обучения, NLP, Python, Luctiorm.

Языковые модели являются одной из наиболее важных частей обработки естественного языка. Здесь, в этом блоге, я внедряю самые простые из языковых моделей. Модель, реализованная здесь, представляет собой «модель статистического языка». Я использовал «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”