Ngrams هو فهرس N-GRAM بسيط قادر على التعلم من مجموعة من البيانات وإنشاء إخراج عشوائي في نفس النمط. يتم تنفيذ أنظمة الفهرس والرمز المميز كواجهات ، بحيث يمكنك لف الحل الخاص بك.
يمكنك اختبار ngrams عن طريق تشغيل خادم الويب الصغير في cmd/rest/trigrams.go . هناك أيضًا مثال GRPC-Proto في cmd/grpc .
$ git clone https://github.com/mochi-co/ngrams.git
$ cd ngrams
$ go test -cover ./...
$ go build cmd/rest/trigrams.go
or
$ go run cmd/rest/trigrams.go
سيخدم خادم الويب نقطتين:
localhost:8080/learn فهرسة نص نص عادي من البيانات. يمكن العثور على نصوص التدريب في training .
$ curl --data-binary @"training/pride-prejudice.txt" localhost:8080/learn
# {"parsed_tokens":139394}
curl -d 'posting a string of text' -H "Content-Type: text/plain" -X POST localhost:8080/learn
# {"parsed_tokens":5}
localhost:8080/generate[?limit=n] يولد إخراج عشوائي من ngrams المستفادة. يمكن استخدام معامل الاستعلام limit لتغيير عدد الرموز المستخدمة لإنشاء الإخراج (افتراضي 50).
$ curl localhost:8080/generate
# {
"body": "They have solaced their wretchedness, however, and had a most conscientious
and polite young man, that might be able to keep him quiet. The arrival of the
fugitives. Not so much wickedness existed in the only one daughter will be
having a daughter married.",
"limit": 50
}
$ curl localhost:8080/generate?limit=10
# {
"body": "Of its late possessor, she added, so untidy.",
"limit": 10
}
يمكن العثور على مثال على الاستخدام كمكتبة في cmd/rest/trigrams.go . يستخدم مثال Trigrams tokenizers.DefaultWord tokenizer ، والذي سيقوم بتحليل وتنسيق ngrams استنادًا إلى قواعد الألفابيت اللاتينية العامة.
import "github.com/mochi-co/ngrams" // Initialize a new ngram index for 3-grams (trigrams), with default options.
index = ngrams . NewIndex ( 3 , nil )
// Parse and index ngrams from a dataset.
tokens , err := index . Parse ( "to be or not to be, that is the question." )
// Generate a random sequence from the indexed ngrams.
out , err := index . Babble ( "to be" , 50 ) يمكن استبدال كل من آليات تخزين البيانات والرمز المميز للمؤشر بتلبية واجهات المتجر والرمز المميز ، مما يتيح ضبط الفهرس لأغراض مختلفة. يدعم الفهرس BigRams ، Trigrams ، Quadgrams ، إلخ ، عن طريق تغيير قيمة NewIndex n (3).
// Initialize with custom tokenizers and memory stores.
// The DefaultWordTokenizer take a bool to strip linebreaks in parsed text.
index = ngrams . NewIndex ( 3 , ngrams. Options {
Store : stores . NewMemoryStore (),
Tokenizer : tokenizers . NewDefaultWordTokenizer ( true ),
}) يتكون الرمز المميز من طريقة Tokenize يتم استخدامها لتحليل بيانات الإدخال في الرموز المميزة لـ NGRAM ، وطريقة Format تجمعها معًا بتنسيق متوقع. تستخدم المكتبة tokenizers.DefaultWord tokenizer افتراضيًا ، وهو رمز بسيط لتحليل معظم اللغات اللاتينية (الإنجليزية ، الفرنسية ، إلخ) في رموز NGRAM.
ستقوم طريقة Format بإجراء محاولة أفضل جهد لتفكيك أي رموز NGRAM محددة مرة أخرى بطريقة صحيحة من الناحية النحوية (أو أيهما مناسب لنوع الرمز المميز الذي يتم تنفيذه).
يمكن إنشاء المميزات الجديدة عن طريق إرضاء واجهة tokenizers.Tokenizer ، مثل رمز مجموعات بيانات CJK أو تسلسل الأميني.
بشكل افتراضي ، يستخدم الفهرس متجرًا في الذاكرة ، stores.MemoryStore . هذا هو متجر ذاكرة أساسي يخزن NGRAMS كما هو. إنه لأمر رائع بالنسبة للأمثلة الصغيرة ، ولكن إذا كنت تفهرس ملايين الرموز ، فسيكون من الجيد التفكير في الضغط أو التعرج.
يمكن إنشاء متاجر جديدة عن طريق إرضاء stores.Store .
يتم تشجيع المساهمات في ngrams . افتح مشكلة للإبلاغ عن خطأ أو تقديم طلب ميزة. طلبات السحب المدروسة جيدًا!
معهد ماساتشوستس للتكنولوجيا.
يتم الحصول على نصوص التدريب من Project Gutenberg.