Shanraq.org Shanraq.org
IT

Үлкен тілдік үлгісіз ЖИ: өз үлгімізді жасаймыз 23-сабақ (барлығы 30)

23-сабақ. Мысалдардан сұрақ түрін танимыз

Оқушы уақыт туралы карточкаларда «қашан», орын туралы карточкаларда «қайда» жиі кездесетінін байқайды. Бағдарламаға осы сәйкестіктерді санауды үйретеміз. Бұл — шағын жіктегіш: ол таныс сұрақ түрін таңдайды, үйірме деректерін білмейді және еркін мәтін құрастырмайды.

Мәтін ИИ көмегімен аударылды.

Бұл не үшін керек?

Оқушы уақыт туралы карточкаларда «қашан», орын туралы карточкаларда «қайда» жиі кездесетінін байқайды. Бағдарламаға осы сәйкестіктерді санауды үйретеміз. Бұл — шағын жіктегіш: ол таныс сұрақ түрін таңдайды, үйірме деректерін білмейді және еркін мәтін құрастырмайды.

Бағдарламаға дейін

23-қадамдағы examples.json файлын алыңыз: онда оқыту мен баптауға арналған 13 ашық карточка бар; бақылау бөлігі әзірге жабық. Нышан — сұрақтан байқалатын бөлік; ол 21-сабақтағы дұрыс жауапты білдіретін белгіден бөлек. Әр сөздің өзін және алғашқы төрт әрпін аламыз: word[:4] басынан төртінші орынға дейін алады, төртінші орындағы әріп кірмейді. Қысқа сөз екі бірдей нышан беруі мүмкін; осы оқу санағында екеуін де қалдырамыз. weights әр нышан оқыту сұрақтарының қай түрінде қанша рет кездескенін сақтайды. feature not in weights жазба әлі жоқ екенін білдіреді.

examples.json файлын бағдарламамен бір қалтаға көшіріңіз. 13 карточканы қайта басудың қажеті жоқ: пішімі 22-сабақта түсіндірілген.

Жоба түбірінен қадам қалтасына өтіп, бағдарламаны іске қосыңыз:

cd course/kazakh-ai/step-23
python3 classifier.py

Windows жүйесінде соңғы пәрменнің орнына py classifier.py деп жазыңыз.

import json

with open("examples.json", encoding="utf-8") as file:
    rows = json.load(file)
weights = {}
for row in rows:
    if row["split"] == "train":
        words = row["text"].lower().replace("?", "").replace(",", "").split()
        for word in words:
            for feature in [word, word[:4]]:
                if feature not in weights:
                    weights[feature] = {"уақыт": 0, "орын": 0}
                weights[feature][row["label"]] += 1
for row in rows:
    if row["split"] == "tune":
        scores = {"уақыт": 0, "орын": 0}
        words = row["text"].lower().replace("?", "").replace(",", "").split()
        for word in words:
            for feature in [word, word[:4]]:
                if feature in weights:
                    scores["уақыт"] += weights[feature]["уақыт"]
                    scores["орын"] += weights[feature]["орын"]
        if scores["уақыт"] > scores["орын"]:
            prediction = "уақыт"
        elif scores["орын"] > scores["уақыт"]:
            prediction = "орын"
        else:
            prediction = "білмеймін"
        print(row["text"], "→", prediction)

Қадам файлдары.

Код қалай жұмыс істейді?

Код тек train бөлігінен үйренеді. weights[feature][row["label"]] += 1 адам қойған белгіге сай нышан санағын арттырады. Кейін әр tune сұрағы үшін таныс нышандардың сандарын scores ішіне қосады. Үлкен сан жеңеді; тең болса, білмеймін шығады. Бұлар — кездесу сандары, ықтималдық та, сенімділік өлшемі де емес. Шахмат қашан және қайда өтеді? Уақыты қандай? сұрағында жіктегіш уақытты қате таңдайды: уақыт нышандары көбірек. Келесі сабақта тоқтату ережесін қосамыз.

Тірек сызба

train → сөздер мен алғашқы 4 әріп → нышандар бойынша санақ → tune → екі санды салыстыру → түр не бас тарту.

Еске түсіріп, тексеріңіз

Кодты жауып, Шахмат нешеде? неліктен бас тартатынын түсіндіріңіз: оқытуда нешеде болмады, ал үйірме атауы екі белгімен бірдей жиі кездесті. Бес tune сұрағының үлгі нәтижесі: уақыт, орын, білмеймін, білмеймін, уақыт. Көмек: қашан, қайда, уақыты нышандарының кездесу санын қараңыз. Жиі қате: үлкен сан сұрақтың бір мағыналы екенін дәлелдейді деп ойлау.

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.