Inlägg

Inlägg som jaqob har skrivit i forumet
Av jaqob
Skrivet av Yoshman:

Spännande... Det blir rätt med 70b modellen, men fel med 8b modellen. Känns lite som just hur LLMs approximerar kan bli scary for matematiska beräkningar då.

Detta är med 70b
<Uppladdad bildlänk>

BTW: 70b modellen är ju super, pluggat in den i min VS code nu

Edit: med tusen-separator och korrekt användning av decimalavskiljare för engelska tolkar även 7b modellen indata-siffrorna rätt
Så man behöver tydligen den extra "hjärnkapaciteten" från 70b modellen för att rätta den typen av fel i indata!

Klicka för mer information

We have 100,000 sek placed in an account with 3.00% interest rate. We also have 1,000,000 sek in loans, with 5.00% interest. If we move our savings to an account with 2.00% interest rate, how much discount do we need to get on the interest on our loan to do break even? Let's calculate the current and new scenarios: **Current scenario:** * Savings: 100,000 SEK with a 3.00% interest rate = 3,000 SEK in interest per year * Loans: 1,000,000 SEK with a 5.00% interest rate = 50,000 SEK in interest per year **New scenario:** * Move savings to an account with a 2.00% interest rate (let's call this new interest income "x") * Interest paid on loans remains the same: 50,000 SEK per year * New interest income from savings: x = 100,000 SEK × 2.00% = 2,000 SEK To break even, the new interest income should be equal to or greater than the interest paid on the loans: 2,000 SEK (new interest income) ≥ 50,000 SEK (interest paid on loans) Since the new interest income is lower than the interest paid on the loans, we need a discount on the loan interest to make up the difference. Let's find out how much discount we need: Discount needed = Interest paid on loans - New interest income = 50,000 SEK - 2,000 SEK = 48,000 SEK So, to break even, we would need a discount of at least 48,000 SEK (or approximately 4.80%) on the interest rate of our loan. Note that this calculation assumes the interest rates remain constant and there are no other changes to your financial situation.

Visa mer

Tack för tipsen! Känns som 70b modellen är en bra anledning att skaffa en lite roligare dator...
Hur använder du modellen tillsammans med VS Code på ett bra sätt?

Av jaqob
Skrivet av Elgot:

Frågan är väl dock vad man förväntar sig? Det där gäller väl egentligen även om man pratar med en människa?

Här är ett anonymiserat exempel på den typen av frågor jag försöker ställa. Inte för att det är en särskilt lämplig fråga, utan för att jag precis hade satt ihop ett excelark som svarade på samma fråga så att det var enkelt att dubbelkolla svaret.

Citat:

>>> We have 100000 sek placed in an account with 3,00% interest rate. We also have 1000000 sek in loans, with 5,00% interest. If we move our savings to an account with 2,00% interest rate, how much discount do we need to get on the interest on our loan to do break even?
Let's calculate the current interest income from the savings and the interest payments on the loans:

Interest income from savings: 100000 sek x 3.0% = 3000 sek per year
Interest payment on loans: 10000000 sek x 5.0% = 500,000 sek per year

If we move our savings to an account with a 2.0% interest rate, the new interest income would be:

New interest income from savings: 100000 sek x 2.0% = 2000 sek per year

To break even, we need to reduce the interest payment on loans by an amount that equals the difference between the old and new interest income:

Difference in interest income: 3000 sec - 2000 sec = 1000 sec per year

Since this is a negative value, it means we need to receive a discount on the interest payment on our loan. To break even, we would need a discount of 1000 sek per year.

To calculate the percentage discount needed, divide the difference in interest income by the original interest payment and multiply by 100:

Discount percentage = (1000 sec / 500,000 sec) x 100% ≈ 0.20%

So, to break even, we would need a 0.20% discount on the interest payment on our loan.

Skummar man bara igenom, utan att titta noga, så verkar allting bra. Men den gör samma fel varje gång jag försöker ställa liknande frågor. I frågan skriver jag att lånet är 1000000 sek (en miljon), i svaret räknar LLama med att lånet är 10000000 sek (tio miljoner). Jag vet att även ChatGPT kan ha problem med siffror, men det här känns ändå värre.

Av jaqob

Lekte vidare lite igårkväll. Kan inte skicka visa något exempel, är lite väl mycket personliga detaljer, men modellen verkar riktigt dålig på att hantera siffror. Testade ett par olika exempel där jag bad den räkna på räntor på konton och lån, och balansen emellan, för att ha som input vid förhandlingar med banken. Den "förstår" absolut problemen, och gör rätt uppställningar, men den håller inte i ordning på siffrorna, utan helt plötsligt har den strukit, eller lagt till, en siffra så att lån en konton blir en tiopotens högre eller lägre.

Så det är precis som @evil penguin skrev ovan, det går inte riktigt att använda den om man inte på förhand har tillräckligt med kunskap för att värdera svaret.

Av jaqob
Skrivet av beh:

Den här processen involverar inte tänkande i mänsklig mening. Istället handlar det mer om mönsterigenkänning, statistisk analys och generering baserat på sannolikheter härledda från träningsdata. Även om det kan verka som att en LLM tänker igenom ett problem, utnyttjar det i grund och botten ett stort arkiv av inlärda språkmönster och information för att simulera ett genomtänkt svar.

Jo, det har jag egentligen full koll på. Och det är med tanke på det som jag tycker det är så intressant när man ibland tycker sig se något lite mer, när den faktiskt löser problem där lösningen i sig mest troligen inte finns i datamängden den tränats på.

Av jaqob
Skrivet av talonmas:

*ps2: Har du ställt frågan till Llaama3 hur den kan svara på frågor? Och be den ge svaret på ett förenklat sätt. Brukar bli riktigt bra svar

Intressant nog så lyckades inte min dator få fram ett svar från 70b modellen, utan den tuggade i ett par timmar. 8b modellen svarar däremot såhär:

Citat:

>>> Can you, in short terms, descibe how you are able to answer questions?
I'm a large language model trained on vast amounts of text data. Here's a simplified explanation of my "thought process":

1. **Text Input**: You type your question or prompt into the chat window.
2. **Pattern Matching**: My algorithms quickly scan through my vast knowledge base to identify relevant patterns, phrases,
and concepts related to your query.
3. **Contextual Understanding**: I analyze the context of your question, including nuances like tone, intent, and implied
meaning, to better comprehend what you're asking.
4. **Knowledge Retrieval**: I search my massive database for relevant information, drawing from various sources such as
books, articles, research papers, and more.
5. **Inference Generation**: Using the retrieved knowledge, I generate an answer by making logical inferences and
connections between related concepts.
6. **Post-processing**: My AI algorithms refine the answer to ensure it's clear, concise, and easy to understand.
7. **Response Output**: The final answer is generated, and I present it back to you through our chat interface.

This process happens rapidly, often in a matter of milliseconds!

En smula förenklat kanske

Av jaqob
Skrivet av HappyPie:

Apropå din fråga Det går att storleksoptimera modeller eller träna nya modeller på befintliga modeller och få en relativt bra sådan trots mindre storlek. Bästa analogin jag har är som att jämföra en PNG bild (loseless) mot JPG.
Finns andra sätt att storleksoptimera, men så länge den kan koppla någorlunda bra i "context space" eller "embendding space" så kan den härleda svar relativt bra ser det ut som.

Det är jag med på Min fråga kretsar egentligen snarare kring huruvida modellen faktiskt skapat en förståelse kring grundläggande fysik, eller åtminstone geometri och balans? Eller hur kan man utifrån språkförståelse stapla saker? Eller är det så att det är så pass vanligt att saker staplas i texterna den tränas på att det räcker?

Av jaqob

LLama3 eller "Hur kan en språkmodell stapla saker?"

Under förra veckan släppte Meta llama3, en riktigt kompetent LLM som man kan köra lokalt. Går även att köra utan en kraftfull GPU, men var beredd på att varje fråga kan ta lång tid!

Installeras enklast med hjälp av ollama, och sen installeras modellen med

ollama run llama3:8b

eller

ollama run llama3:70b

beroende på hur stor modell man vill ha.
70b tar ungefär en kvart på sig att svara på en fråga på min ganska nya laptop med en i7:a och intel igpu.

Men, det jag egentligen ville prata om är om frågan nedan, där LLama 3 och ChatGPT ger liknande svar. Jag har ganska bra förståelse för hur neurala nätverk, i den mån man nu kan påstå det när forskarna fortfarande debatterar exakt hur de funkar, och lite mindre förståelse för LLM och dess transformationer. Men, hur kan en språkmodell svara på den här typen av frågor? Det känns inte som att det borde finnas tillräckligt många exempel i text för att lära sig utifrån det, eller..?

>>> you have four marbles, a book, a box, a bottle and an egg. How would you place them to build the highest stable tower? What a fun challenge! To build the highest stable tower with these items, I'd follow a strategic approach: 1. **Base layer:** Place the box on the ground as the foundation of the tower. It's sturdy and provides a flat surface. 2. **Middle layer:** Position the book on top of the box. The book is relatively flat and wide, making it an ideal middle layer that can support the weight above. 3. **Marble layer:** Carefully place three marbles on top of the book, spaced evenly apart to form a triangular base. This will provide a stable platform for the next layer. 4. **Bottle layer:** Gently place the bottle on top of the marbles, centered and upright. The bottle's narrow shape allows it to sit securely on the marble triangle. 5. **Egg layer (the crowning glory!):** Finally, carefully balance the egg on top of the bottle. Since the egg is delicate, it's essential to ensure the tower is stable before adding this final layer. The resulting tower should look like this: Box → Book → Marbles (3) → Bottle → Egg This structure takes advantage of each item's unique characteristics to create a sturdy and balanced tower. The box provides a solid foundation, the book adds width and stability, the marbles form a triangular base, the bottle acts as a narrow but stable platform, and the egg rests safely on top. Please note that building this tower requires patience, gentle movements, and a bit of luck!

Av jaqob

Det oroar mig en aning att ingen pratar om priset. Det verkar finnas en förhoppning om att det ska bli billigare än en Macbook, men finns det några indikationer på det? Kommer man kunna köpa en dator med Snapdragon X Elite, 16Gb RAM och 512Gb SSD för under 20k?

Av jaqob

Här är jag väldigt kluven. Apple håller på med mycket fulspel, men samtidigt förstår jag verkligen att de ogillar stora framgångsrika gratisappar som drar in massa pengar men där inget går till Apple.

Av jaqob

Dag: 12
Språk: Python

Ganska nöjd med gårdagens uppgift. Kanske inte den mest kompakta, men ganska enkel logik.
Tog dock ganska lång tid att hitta de sista buggarna...

def get_difference(str1, str2): return sum ( str1[i] != str2[i] for i in range(len(str1)) ) def find_reflection(pattern, diff): for i, line in enumerate(pattern): identical = False if i >= 0 and i < len(pattern)-1: scope = min(i, (len(pattern)-2)-i) l=i r=i+1 j=0 diff_sum = 0 while j <= scope: if get_difference(pattern[l-j], pattern[r+j]) <= diff: diff_sum+=get_difference(pattern[l-j], pattern[r+j]) identical = True else: identical = False break j+=1 if identical and diff_sum == diff: return i+1 return 0 with open('input.txt') as file: lines=file.read() patterns = [] for pattern in lines.split("\n\n"): patterns.append(pattern.strip().split("\n")) horizontal_p1 = [] vertical_p1 = [] horizontal_p2 = [] vertical_p2 = [] for x, pattern in enumerate(patterns): horizontal_p1.append(find_reflection(pattern,0)) vertical_p1.append(find_reflection(list(zip(*pattern[::-1])),0)) horizontal_p2.append(find_reflection(pattern,1)) vertical_p2.append(find_reflection(list(zip(*pattern[::-1])),1)) print("Part one:", sum(horizontal_p1)*100+sum(vertical_p1)) print("Part two:", sum(horizontal_p2)*100+sum(vertical_p2))

Dold text
Av jaqob
Skrivet av Yoshman:

Rent strikt behövs inte den extra punkten, men det denna rad blir enklare då man inte behöver hantera fallet att man indexerar beyond-end i "record" på denna rad.

if not "." in record[:groupLen] and record[groupLen] != "#":

Jag hanterar det, så både fallet med och utan punkt exekverar, men utan punkten får jag ett felaktigt, något lägre, svar. Men men, är väl bara att sätta sig och jämföra output

Tack för svaret!

if i >= groups[0] and len(str) > groups[0] and str[groups[0]] != "#":

Edit: Nu funkar det utan punkten, även om jag är lite osäker på exakt varför.

Dag 12
Språk Python

memoized = {} def analyze_list(str, groups): if (str, groups) in memoized: value = memoized[(str, groups)] return value if len(str) == 0: if len(groups) == 0: return 1 else: return 0 res = 0 if str[0] == ".": res += analyze_list(str[1:], groups) elif str[0] == "?": res += analyze_list("." + str[1:], groups) + analyze_list("#" + str[1:], groups) elif str[0] == "#": if len(groups) > 0: i = 0 while i < len(str) and len(str) >= groups[0] and str[i] != ".": i+=1 if i >= groups[0] and (len(str) == groups[0] or str[groups[0]] != "#"): res += analyze_list(str[groups[0]+1:], groups[1:]) memoized[(str, groups)] = res return res with open('input.txt') as file: lines=file.read().splitlines() results = [] for line in lines: results.append(analyze_list(line.split()[0], tuple([int(i) for i in line.split()[1].split(",")]))) print(sum(results)) results = [] for line in lines: results.append(analyze_list("?".join([line.split()[0]]*5), tuple([int(i) for i in line.split()[1].split(",")*5]))) print(sum(results))

Dold text
Av jaqob
Skrivet av Yoshman:

Dag: 12
Språk: Python

def parse_condition_records(input): records = [] for line in input: (record, groupsString) = line.split() groups = tuple([int(group) for group in groupsString.split(",")]) records.append((record, groups)) return records def arrangements(record, groups, memoize): key = (record, groups) result = memoize.get(key) if result is not None: return result if record == "": return 1 if len(groups) == 0 else 0 if record[0] == ".": return arrangements(record[1:], groups, memoize) n = 0 if record[0] == "?": n += arrangements(record[1:], groups, memoize) if len(groups) > 0: groupLen = groups[0] if not "." in record[:groupLen] and record[groupLen] != "#": n += arrangements(record[groupLen+1:], groups[1:], memoize) memoize[key] = n return n def sum_arrangements(records): return sum([arrangements(record+".", group, {}) for (record, group) in records]) def unfold(records): return [("?".join([record]*5), group*5) for (record, group) in records] def solve(input): records = parse_condition_records(input) print(sum_arrangements(records)) print(sum_arrangements(unfold(records))) if __name__ == "__main__": solve(open("input/day12.txt").readlines())

Dold text

Jag har en lösning som är väldigt lik din, och där jag efter lite för många timmar av trial and error som jag inte är så stolt över också kommit fram till att man behöver lägga till en avslutande punkt innan man skickar in värdet i den rekursiva snurran. Varför behövs den..? (Eller snarare, varför få man fel resultat utan den..?) Rekursion är småkul, men inte att debugga...

Den här biten från din kod:
results.append(analyze_list("?".join([line.split()[0]]*5)+".", tuple([int(i) for i in line.split()[1].split(",")*5])))
print(sum(results))

memoized = {} def analyze_list(str, groups): if (str, groups) in memoized: value = memoized[(str, groups)] return value if len(str) == 0: if len(groups) == 0: return 1 else: return 0 res = 0 if str[0] == ".": res += analyze_list(str[1:], groups) elif str[0] == "?": res += analyze_list("." + str[1:], groups) res += analyze_list("#" + str[1:], groups) elif str[0] == "#": if len(groups) > 0: i = 0 while i < len(str) and str[i] != ".": i+=1 if i >= groups[0] and len(str) > groups[0] and str[groups[0]] != "#": res += analyze_list(str[groups[0]+1:], groups[1:]) memoized[(str, groups)] = res return res with open('input.txt') as file: lines=file.read().splitlines() results = [] for line in lines: results.append(analyze_list(line.split()[0], tuple([int(i) for i in line.split()[1].split(",")]))) print(sum(results)) results = [] for line in lines: results.append(analyze_list("?".join([line.split()[0]]*5)+".", tuple([int(i) for i in line.split()[1].split(",")*5]))) print(sum(results))

Dold text
Av jaqob

Dag: 3
Språk: Python

Nöjd med hur pass kompakt del 2 blev. Del 1 går att snygga till med ett par loopar till, men det orkar jag inte

Del två går dessutom egentligen att minska ner ytterligare. Min input har t.ex. aldrig fler än två tal bredvid ett kugghjul.

import re def not_empty(str): return not str == "." and not str.isdigit() def find_number(pos_x, pos_y, str): start = end = pos_x while str[start].isdigit(): start-=1 while str[end].isdigit(): end+=1 return int(str[start+1:end]),start+1,end,y with open('input.txt') as file: lines=file.read().splitlines() schematic = [] schematic.append("."*(len(lines[0])+2)) for line in lines: schematic.append("." + line + ".") schematic.append("."*(len(lines[0])+2)) #Part 1 sum = 0 for y, line in enumerate(schematic): for m in re.finditer("\d+", line): isolated = True if not_empty(schematic[y-1][m.start()-1]) or not_empty(schematic[y][m.start()-1]) or not_empty(schematic[y+1][m.start()-1]): isolated = False for x in range(m.start(), m.end()): if not_empty(schematic[y-1][x]) or not_empty(schematic[y+1][x]): isolated = False if not_empty(schematic[y-1][m.end()]) or not_empty(schematic[y][m.end()]) or not_empty(schematic[y+1][m.end()]): isolated = False if not isolated: sum+=int(m.group(0)) print("Part one:", sum) #Part 2 gear_sum = 0 for y, line in enumerate(schematic): for m in re.finditer("\*", line): numbers = [] for i in range(-1,2): for j in range(-1,2): if schematic[y+i][m.start()+j].isdigit(): numbers.append(find_number(m.start()+j,y+i, schematic[y+i])) unique_numbers = list(set(numbers)) if(len(unique_numbers) == 2): gear_sum+=unique_numbers[0][0]*unique_numbers[1][0] print("Part two:", gear_sum)

Dold text
Av jaqob
Skrivet av Gubbjekeln:

När du lägger till en punkt på slutet av raderna missar du att ta bort radbrytningen först.

Dold text

Tack!!

lines=file.read().splitlines() istället för lines=file.readlines() löste det hela. Och det är så klart typ den enda kodraden jag har som inte är delad mellan test-input och riktig input... Då spelade det ju inte så stor roll att jag skrev ut min modifierade tabell för att hitta fel som detta...

Dold text
Av jaqob

Nu behöver jag, även om det tar emot, lite hjälp med första delen av dag 3. Min kod klarar all test-input jag kan hitta på t.ex. reddit, men jag får ett för högt svar på min input. Någon som skrivit ihop något riktigt elakt test ni kan dela? Eller som lite hastigt och enkelt kan se vad jag missat?

import re def not_empty(str): return not str == "." and not str.isdigit() with open('input.txt') as file: lines=file.readlines() schematic = [] schematic.append("."*(len(lines[0])+2)) for line in lines: schematic.append("." + line + ".") schematic.append("."*(len(lines[0])+2)) sum = 0 for x, line in enumerate(schematic): for m in re.finditer("\d+", line): isolated = True if not_empty(schematic[x-1][m.start()-1]) or not_empty(schematic[x][m.start()-1]) or not_empty(schematic[x+1][m.start()-1]): isolated = False for y in range(m.start(), m.end()): if not_empty(schematic[x-1][y]) or not_empty(schematic[x+1][y]): isolated = False if not_empty(schematic[x-1][m.end()]) or not_empty(schematic[x][m.end()]) or not_empty(schematic[x+1][m.end()]): isolated = False if not isolated: sum+=int(m.group(0)) print("Part one:", sum)

Dold text
Av jaqob

Dag: 1
Språk: Python

Som andra sagt, detta måste ju utan tvekan ha varit den svåraste inledningen på många år. Jag fick tillslut fuska och köra någon annans fungerande lösning sida vid sida för att hitta den enda rad i hela inputen där det gick fel. Och då givetvis på något som inte fanns med i exemplen man fick.

Egentligen var väl kanske inte uppgiften i sig jättesvår, det var den undermåliga beskrivningen och de undermåliga exemplen som ställde till det.

Min initiala lösning, som gick ut på att byta ut fösta ordet framifrån och sen sista ordet bakifrån föll på "91twonelt", där bokstäver från samma ord måste användas från båda hållen. Det löste sig genom att arbeta på originalsträngen från båda hållen, men det hade nog bokstavligen tagit mig evigheter att hitta utan hjälp.

import re with open('Day1/input') as file: lines=file.readlines() sum = 0 for line in lines: line = line.strip() matches = re.findall(r'\d', line) value = matches[0]+matches[-1] sum+=int(value) print("Step one:", sum) sum = 0 for line in lines: line = line.strip() original_line = line for x in range(2, len(line)): line = line[0:x].replace("one", "1").replace("two", "2").replace("three", "3").replace("four", "4").replace("five", "5").replace("six", "6").replace("seven", "7").replace("eight", "8").replace("nine", "9") + line[x:len(line)] if line != original_line: break first_digit = re.findall(r'\d', line)[0] line = original_line for x in range(1, len(line)): line = line[0:len(line)-x] + line[len(line)-x:len(line)].replace("one", "1").replace("two", "2").replace("three", "3").replace("four", "4").replace("five", "5").replace("six", "6").replace("seven", "7").replace("eight", "8").replace("nine", "9") if line != original_line: break last_digit = re.findall(r'\d', line)[-1] value = first_digit+last_digit sum+=int(value) print("Step two:", sum)

Och såhär blev det när man slutligen insett att man bara behöver spara första och sista bokstaven när man ersätter...

sum = 0 for line in lines: digits = re.findall(r'\d', line.replace("one", "on1e").replace("two", "t2o").replace("three", "t3e").replace("four", "f4r").replace("five", "f5e").replace("six", "s6x").replace("seven", "s7n").replace("eight", "e8t").replace("nine", "n9e")) sum+=int(digits[0] + digits[-1]) print("Step two:", sum)

Dold text
Av jaqob

Moser 1400, den bästa och billigaste frisören jag träffat, dessutom är det väldigt enkelt att få tid när det passar en själv!

Av jaqob

Provade att stänga av adblockern när jag försökte logga in. Alltså herregud, det ser ut som aftonbladet när det var som absolut värst.

Edit: På tal om aftonbladet, nu försöker de automatinlogga mig på aftonbladet, för att jag är inloggad med ett schipsteadkonto på prisjakt. Suck. Det finns ju åtminstone en vidöppen marknad för den som kommer med ett alternativ.

Av jaqob

Nu har inloggningen ändras, och jag skickas vidare till schibsted. Försöker jag logga in där står det "Lösenordet du angav är felaktigt. Försök igen.". Jag förutsätter att detta är ett tillfälligt problem, har de tagit bort mitt konto blir jag ganska irriterad...

Edit: Kom ett steg längre genom att beställa en verifieringskod. Så nu fastnar jag på en sida som säger "OAuth state mismatch".
Edit2: Nu kom jag in, och mina bevakningar finns kvar.

Everybody has a testing environment. Some people are lucky enough enough to have a totally separate environment to run production in. [x]

Av jaqob

Fler som blir utloggade i tid och otid? Extremt irriterande, framförallt på telefonen.
Känner mig lite som en missbrukare på antabus, efter två decennier med alkohol...