Үлкен тілдік үлгісіз ЖИ: өз үлгімізді жасаймыз 27-сабақ (барлығы 30)
27-сабақ. Қате жазу мен басқа тақырыпты тексереміз
Күзетші келушінің атын тізіммен салыстырады. Аты түсініксіз болса немесе адам бірден екі рұқсат сұраса, күзетші болжай салмай, нақтылайды. Біздің жіктегіш те таныс емес сөзге, қате жазуға және уақыт пен орынды қатар сұрауға келгенде тоқтауы тиіс.
Мәтін ИИ көмегімен аударылды.
Бұл не үшін керек?
Күзетші келушінің атын тізіммен салыстырады. Аты түсініксіз болса немесе адам бірден екі рұқсат сұраса, күзетші болжай салмай, нақтылайды. Біздің жіктегіш те таныс емес сөзге, қате жазуға және уақыт пен орынды қатар сұрауға келгенде тоқтауы тиіс.
Кодқа дейін
examples.json ішінде 24-сабақтың 13 ашық оқыту және баптау карточкасы бар; бақылау белгілерін мұнда көшірмейміз. Код бұрынғы санақтарды үйреніп, кіріс тексерісін қосады. Қос нүктесіз ирек жақшалар allowed жиынын жасайды: ол рұқсат етілген сөздерді сақтайды, in және not in мүшелікті тексереді. def classify(question): қайта қолданылатын, question кірісін алатын функцияны анықтайды. return функцияны аяқтап, нәтиже сөздігін қайтарады. if __name__ == "__main__": файл тікелей іске қосылғанда ғана бес мысалды жүргізеді; басқа файл classify мәнін импорттаса, олар басылмайды. Бұлар — Python-ның қызметтік атаулары, оларды өзгертпеңіз.
Осы қадамның файлдары: examples.json, checks.py.
Жоба түбірінен қадам қалтасына өтіп, бағдарламаны іске қосыңыз:
cd course/kazakh-ai/step-27
python3 checks.py
Windows жүйесінде python3 орнына 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("?", "").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
def classify(question):
text = question.lower().replace("?", "").replace(",", "").replace(".", "")
words = text.split()
allowed = {"шахмат", "сурет", "қашан", "қайда", "уақыты", "орны", "өтеді", "болады"}
for word in words:
if word not in allowed:
return {"status": "refuse", "reason": "білмеймін: таныс емес сөз"}
clubs = []
for word in words:
if word in ["шахмат", "сурет"]:
clubs.append(word)
if len(clubs) != 1:
return {"status": "refuse", "reason": "нақтылаңыз: бір үйірме керек"}
scores = {"уақыт": 0, "орын": 0}
for word in words:
for feature in [word, word[:4]]:
if feature in weights:
scores["уақыт"] += weights[feature]["уақыт"]
scores["орын"] += weights[feature]["орын"]
time_cue = "қашан" in words or "уақыты" in words
place_cue = "қайда" in words or "орны" in words
if time_cue and not place_cue and scores["уақыт"] > scores["орын"]:
return {"status": "ready", "club": clubs[0], "kind": "уақыт"}
if place_cue and not time_cue and scores["орын"] > scores["уақыт"]:
return {"status": "ready", "club": clubs[0], "kind": "орын"}
return {"status": "refuse", "reason": "нақтылаңыз: бір сұрақ түрі керек"}
if __name__ == "__main__":
for question in ["Шахмат қашан?", "Шахмаат қашан?", "Шахмат неге?",
"Шахмат қашан интернет?", "Шахмат қашан қайда?"]:
print(question, "→", classify(question))
Бағдарлама қалай жұмыс істейді?
Кіріс алдымен кіші әріпке түсіп, ?, ,, . белгілерінен тазарады. Кейін әр сөз рұқсат етілген сөздер жиынымен салыстырылады. Шахмаат сөзі үнсіз шахмат болып түзетілмейді; білмеймін: таныс емес сөз шығады. Басқа тақырып та тоқтайды. Содан соң дәл бір үйірме атауы, санақтар және анық нышандар тексеріледі: екі түрлі сұрақ қатар келсе, нақтылау сұралады. Қатаң тізім адам түсінетін кейбір сөйлемдерден де бас тартады; бұл шағын үлгінің шынайы шегі. ready тек «сұрақ түрі анықталды» деген сөз, «дерек табылды» деген сөз емес.
Тірек сызба
Сөздер → бәрі рұқсат етілген бе? → дәл бір үйірме ме? → санағы бар бір анық түр ме? → ready; әйтпесе бас тарту себебі.
Еске түсіріп, тексеріңіз
Кодты жауып, тексерулерді орындалу ретімен атаңыз. Үлгі нәтиже: Шахмат қашан? үшін ready, Шахмаат қашан? мен Шахмат қашан интернет? үшін таныс емес сөзден бас тарту, Шахмат қашан қайда? үшін түрін нақтылау. Көмек: алғашқы сәйкес келмеген тексеру нәтиже қайтарып, функцияны тоқтатады. Жиі қате: ready мәнін дайын кесте деп ойлау; деректер тізімінен іздеу кейін басталады.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.