İngilis və Amerika ədəbiyyatındakı fərqləri öyrənmək üçün maşın təlimindən necə istifadə etdim

Mən öz dilimi inkişaf etdirmək üçün ingilis ədəbiyyatını öyrənməyə davam edərkən, marağım oyandı: Amerika və İngilis İngilisləri nə ilə fərqlənir?

Bu sualı nəzərə alaraq, növbəti addım konkret nümunələr tapmaq üçün təbii dil işləmə və maşın öyrənmə texnikalarından istifadə etmək idi. Ədəbi mətnləri fərqləndirən bir təsnifatçı yetişdirməyin mümkün olub olmadığını maraqlandırırdım.

Müxtəlif dillərdə yazılmış mətnləri ayırd etmək olduqca asandır, çünki sözlərin kəsişməsində kardinallıq (maşın öyrənmə mənasında xüsusiyyətlər) nisbətən aşağı idi. Mətnin kateqoriyalara görə təsnifatı (elm, ateizm, kompüter qrafikası və s.), Mətn təsnifatı ilə işləmək məsələsinə gəldikdə məşhur bir "salam dünyası" dır. Mətnlərdə ortaq bir mövzu olmadığı üçün eyni dildə iki ləhcəni müqayisə etməyə çalışanda daha çətin bir işim var.

Maşın öyrənməsinin ən çox vaxt aparan mərhələsi məlumatların axtarışı ilə məşğul olur. Təlim nümunəsi üçün Gutenberg layihəsindən sərbəst yükləyə biləcək mətnlərdən istifadə etdim. Amerika və İngilis müəlliflərinin siyahısı üçün Vikipediyada tapdığım müəlliflərin adlarını istifadə etdim.

Çətinliklərdən biri Wikipedia səhifəsinə uyğun bir mətn müəllifinin adını tapmaq idi. Saytda yaxşı bir ad axtarış aparıldı. Ancaq sayt məlumatların təhlilinə icazə vermədiyi üçün bunun əvəzinə metadata malik faylları istifadə etməyi təklif etdim. Bu, adların uyğun gəldiyi bir mənasız bir iş görməli olduğumu ifadə etdi (Ser Artur Ignatius Conan Doyle və Doyle, C. eyni adamdır, ancaq Doyle, ME fərqli bir adamdır) - və bunu çox etməliydim. yüksək dəqiqliyi təmin etmək üçün çox səy tələb olunur.

Bunun əvəzinə yüksək dəqiqliyə nail olmaq və vaxta qənaət etmək üçün nümunə ölçüsünü qurban verdim. Unikal identifikator olaraq bəzi metadata sənədlərinə daxil edilmiş bir müəllifin Vikipediya bağlantısını seçdim. Bu sənədlərlə mən 1600 İngilis və 2500 Amerika mətnini əldə edə bildim və təsnifatçımı öyrətməyə başladım.

Bu layihə üçün sklearn paketindən istifadə etdim. Məlumat toplama və təhlildən sonra ilk addım əvvəlcədən işləmə üsuludur, bunun üçün bir CountVectorizer istifadə etdim. Bir CountVecrorizer mətn məlumatlarını giriş kimi götürür və çıxış olaraq xüsusiyyətlərin bir vektorunu qaytarır. Sonra tf-idf (müddət tezliyi - tərs sənəd tezliyi) hesablamalı oldum. Nə üçün istifadə etməyimin və necə olmasının qısa izahı:

Məsələn "a" sözünü götürün və müəyyən mətndə sözün rast gəlinmə sayını sayın. Tutaq ki, bizdə 100 hadisə var və sənəddəki sözlərin ümumi sayı 1000-dir.

Beləliklə,

tf ("the") = 100/1000 = 0.1

Sonra, 50 dəfə meydana gələn "sepals" sözünü götürün:

tf ("sepal") = 50/1000 = 0.05

Bu sözlər üçün tərs sənəd tezliyini hesablamaq üçün ən azı bir söz meydana çıxan mətnlərin sayının mətnlərin ümumi sayına nisbətinin logarifmindən istifadə etməliyik. Hər 10000 mətn varsa və "hər" hər biri varsa:

idf ("the") = log (10000/10000) = 0 və

tf-idf ("the") = idf ("the") * tf ("the") = 0 * 0.1 = 0

"Sepals" sözü daha nadirdir və yalnız 5 mətndə tapılmışdır. Buna görə:

idf ("sepal") = log (10000/5) və tf-idf ("sepal") = 7.6 * 0.05 = 0.38

Nəticədə ən çox yayılmış sözlər daha yüngül olur və daha az ümumi sözlər daha ağırdır. "Sepals" sözü tez-tez baş verərsə, botanik bir mətn olduğunu ehtimal edə bilərik. Bir təsnifatı sözlərlə bəsləyə bilmirik, bunun əvəzinə tf-idf ölçüsünü istifadə edirik.

Verilənləri bir sıra funksiyalar şəklində təqdim etdikdən sonra təsnifatı hazırlamalı oldum. Mən seyrək məlumatlar kimi təmsil olunan mətn məlumatları ilə işləmişəm. Beləliklə, ən yaxşı seçim bir çox xüsusiyyətləri ilə yaxşı işləyən bir xətti təsnifat istifadə etməkdir.

Əvvəl standart parametrləri olan CountVectorizer, TF-IDFTransformer və SGDClassifier işlədim. Nümunə ölçüsünün düzgünlüyünün diaqramını təhlil edərkən - 0.6 ilə 0.85 arasında dəyişən dəqiqliklə - təsnifatorun istifadə edilən xüsusi nümunədən çox asılı olduğunu və buna görə çox təsirli olmadığını gördüm.

Təsnifat çəkilərinin siyahısını əldə etdikdən sonra problemin bir hissəsini gördüm: təsnifata səs-küy kimi yanaşmalı olduğumuz "von" və "er" kimi sözlər əlavə edildi. Stop_words parametrini CountVectorizer-ə təyin etməklə bu sözləri funksiyalardan silməklə bu problemi asanlıqla həll edə bilərəm: stop_words = "english" (və ya stop sözlərinin özəl siyahısını).

Standart dayandırma sözləri çıxarıldıqda, mən 0.85 dəqiqliyi alıram. Sonra GridSearchCV ilə parametrlərin avtomatik seçilməsinə başladım və yekun dəqiqliyi 0.99-a çatdım. Bu nəticəni daha böyük bir təlim nümunəsi ilə yaxşılaşdıra bilərəm, amma indiyə qədər bu təsnifatçı ilə yapışdım.

İndi məni ən çox maraqlandıran şey: Hansı sözlər mətnin mənşəyini göstərir? Təsnifatdakı çəki ilə sıralanan sözlərin siyahısı:

Amerikan: dollar, yeni, york, qız, boz, amerikan, oyma, rəng, şəhər, ain, uzun, düz, qonaq otağı, boston, şərəf, Вашингтон, ev, iş, nəhayət, bəlkə, hodder, əbədi, doroti, dr

İngilis: dəyirmi, centlmen, xanım, london, bütöv, bəy, bəy, boz, sevgi, şərəf, ilə, Philip, qolu, funt, scrooge, temalar, əşyalar, dəniz, adam, son, gəl, rəng, illüstrasiya, İngilis dilini öyrən

Təsnifatçı ilə əylənərkən "ən Amerikan" İngilis müəlliflərini və "Ən İngilis" Amerika müəlliflərini (klassifikatorumun necə pis işləyə biləcəyini çətin bir yol) seçdim.

"İngilis" Amerikalılar:

  • Frances Hodgson Burnett (İngiltərədə anadan olmuş, 17 yaşında ABŞ-a köçmüş, ona görə də Amerikalı yazıçı kimi davranıram)
  • Henry James (ABŞ-da anadan olmuş, 33 yaşında İngiltərəyə köçmüşdür)
  • Owen Wister (bəli, qərb fantastikasının atası)
  • Mary Roberts Rinehart (bir səbəblə Amerikan Agatha Christie adlanır)
  • William McFee (başqa bir yazıçı Amerikaya gənc yaşda köçmüşdür)

"Ən Amerikalı" İngilis:

  • Rudyard Kipling (bir neçə il Amerikada yaşayıb, "Amerikan qeydləri" ni də yazıb)
  • Anthony Trollope ("Şimali Amerika" müəllifi)
  • Frederik evləndi
  • Arnold Bennett ("Amerika Birləşmiş Ştatları: İlk ziyarət təəssüratları" müəllifi) başqa bir cənab Səyahət məlumatını yazdı
  • E. Phillips Oppenheim

Həm də "ən çox İngilis" İngilis və "Amerikalı" Amerika müəllifləri (çünki təsnifatçı hələ də yaxşı işləyir):

Amerikalılar:

  • Francis Hopkinson Smith
  • Hamlin Garland
  • George Ade
  • Charles Dudley Warner
  • Mark Tven

İngilis:

  • George Meredith
  • Samuel Richardson
  • John Galsworthy
  • Gilbert Keith Chesterton
  • Anthony Trollope (ey, salam)

Bu işi @TragicAllyHere-dən ilham aldım. Civildəmək:

Yaxşı başa düşdüyüm kimi, qurdlar həqiqətən vacibdir.